全体像としては、Lesson
がhas_many
でLessonImage(画像で、string)
を持っていて、LessonImage
のテーブルはid, lesson_id, lesson_image, created_at, updated_at
のみの構造です。画像を削除した状態で、以下記載の通りno image
を表示させる仕様にしています。
show
テンプレートでは、仕様通りにno image
と表示されるのに対し、index
テンプレートではundefined method 'lesson_image' for nil:NilClass
のエラーが出てしまいます。
binding.pry
を使って確認しても、nil
では無いはずなのですが、原因わからず、誤りをご指摘頂けますと幸甚です。
ちなみに、画像がある状態(LessonImage
のlesson_image
カラムにデータがある状態)においては、エラーは出ずにきちんと表示がされます。
ruby
1#show.erb.html ->問題なく動作します 2<% if @lesson.lesson_images.first.lesson_image.present? %> 3<%= image_tag @lesson.lesson_images[0].lesson_image.url %> 4<% else %> 5no image 6<% end %> 7 8#index.erb.html -> undefined method 'lesson_image' for nil:NilClassが出てしまいます。 9<% @lessons.each do |lesson| %> 10<% if lesson.lesson_images.first.lesson_image.present? %> 11<%= image_tag lesson.lesson_images[0].lesson_image.url %> 12<% else %> 13no image 14<% end %>
index.erb.html
にてbinding.pry
を入れた結果はこれです
<% @lessons.each do |lesson| %> <% binding.pry %> <% if lesson.lesson_images.first.lesson_image.present? %> <%= image_tag lesson.lesson_images[0].lesson_image.url %> <% else %> no image <% end %> pry(#<#<Class:0x007fa8b40c3078>>)> lesson.lesson_images.first LessonImage Load (0.5ms) SELECT "lesson_images".* FROM "lesson_images" WHERE "lesson_images"."lesson_id" = $1 ORDER BY "lesson_images"."id" ASC LIMIT $2 [["lesson_id", 46], ["LIMIT", 1]] => #<LessonImage:0x007fa8b558ec78 id: 10, lesson_id: 46, lesson_image: nil, created_at: Thu, 13 Apr 2017 08:46:38 JST +09:00, updated_at: Thu, 13 Apr 2017 23:15:37 JST +09:00> [3] pry(#<#<Class:0x007fa8b40c3078>>)> lesson.lesson_images.first.nil? CACHE (0.0ms) SELECT "lesson_images".* FROM "lesson_images" WHERE "lesson_images"."lesson_id" = $1 ORDER BY "lesson_images"."id" ASC LIMIT $2 [["lesson_id", 46], ["LIMIT", 1]] => false
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/14 14:16
2017/04/14 14:42