###前提・実現したいこと
Ruby on Rails4で開発中。
現在勉強のため、twitterのようなアプリケーションを作成しました。
deviseでログイン機能を実装し、ログインしているユーザーしか投稿できないようにしています。
投稿された記事はどのユーザーが投稿したのかを関連づけています。
今まではユーザーが退会した場合、そのユーザーが投稿した記事も削除されるようにしていたのですが、今回ユーザーが退会した場合に、その退会したユーザーが投稿した記事は削除されず残しておくようにしたいと思い取り組んでいます。
退会したユーザーのユーザーnameは「退会したユーザー」として表示して記事を残そうと思っているのですが、その方法が分かりません。
ユーザーが退会した場合、投稿したユーザーは当たり前ですがnilになってしまいます。
そのユーザーnilへの対応の仕方が分からないのでご教授お願いします。
###発生している問題・エラーメッセージ
ユーザーが退会した場合、userがnilになるので
・user/showへのリンクでエラー
・userのprofile_imgでエラー
・user.nameでエラー
と上記のようなエラーが発生してしまいます。
どのように対応したらいいのでしょうか?
###該当のソースコード
timeline/index.html.erb
ruby
1<!-- 投稿一覧 --> 2 <% @timelines.each do |timeline| %> 3 <%= link_to user_path(timeline.user_id) do %> 4 <%= profile_img(timeline.user) %> 5 <% end %> 6 <%= timeline.user.name %> 7 <%= link_to timeline_path(timeline) do %> 8 <%= image_tag (timeline.photo_url) if timeline.photo.present? %> 9 <%= timeline.content %></p> 10 <% end %> 11 <% end %>
applicationHelper.rb
ruby
1module ApplicationHelper 2 # プロフィール画像の設定 3 def profile_img(user) 4 return image_tag(user.avatar, alt: user.name) if user.avatar? 5 6 unless user.provider.blank? 7 img_url = user.image_url 8 else 9 img_url = 'no_image.png' 10 end 11 image_tag(img_url, alt: user.name) 12 end 13end
###補足情報(言語/FW/ツール等のバージョンなど)
他に必要なコードなどあれば記載しますので、何卒よろしくお願いいたします。
nilに対して対応して試してみたこと
timeline/index.html.erb
ruby
1<!-- 投稿一覧 --> 2<% @timelines.each do |timeline| %> 3 <% if timeline&.user_id.present? %> 4 <%= link_to user_path(timeline.user_id) do %> 5 <%= profile_img(timeline.user)%> 6 <% end %> 7 <% else %> 8 # ユーザーIDがnilの場合のプロフィール画像の表示を記述 9 <% end %> 10 11 <% if timeline&.user_id.present? %> 12 <%= timeline.user.name %> 13 <%= link_to timeline_path(timeline) do %> 14 <%= image_tag (timeline.photo_url) if timeline.photo.present? %> 15 <%= timeline.content %> 16 <% end %> 17 <% else %> 18 # ユーザーIDがnilの場合の処理 19 <% end %> 20<% end %>
ユーザーが存在する場合と、存在しない(nil)場合の処理をif文で条件分岐して表示すればいいのかと思い、このコードを書きました。
ですが、nilの場合の判定ができていないのか、ユーザーが存在しない場合も<%= timeline.user.name %>
などが呼び出されエラーになってしまいます。
*試したことへの補足
なぜnilの判定がうまくできないのか?
ユーザーがいなくなった(退会した)記事の中身を見てみたらユーザーIDは残っていた。
これが原因でユーザーIDのnil判定ができていませんでした。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/16 15:29
2017/06/16 19:29
2017/06/17 00:33