質問失礼いたします。
現在railsの学習のためにアプリを作成しているのですが、if文の分岐が思うような挙動にならず困っているため質問させていただきます。
実現したいこと
子モデルの画像がnilの場合、noimageのデフォルト画像を表示させたい。
(現在はテストのためテキスト表示になっています)
親モデル:item
子モデル:item_image
実際の動作
itemを一覧表示させようとindexページにeach文でひとつずつ取り出しているのですが、item_image.imageがnilの場合の処理がなにも行われません。
item_image.image.nil?で画像がない場合の処理を先に書いてもelseの処理は行われますが、nilの処理を行うことができず、ブラウザもなにもないことになっています。
nil blank presentなどを試してもダメだったので、これは親モデルのeach文内で子モデルのカラムのnilを判別できないなど子モデルのデータの取得になにか問題があるのでしょうか?
コード
index.html.erb
ruby
1<div class="container"> 2 <div class="row"> 3 <% @items.each do |item| %> 4 <div class="col-md-4"> 5 <div class="card"> 6 <div class="card-header"> 7 <% item.item_images.each do |item_image| %> 8 <% if item_image.image.nil? %> 9 <h2>イメージ画像はありません</h2> 10 <% else %> 11 <%= image_tag item_image.image.url, class: "card-img-top2" %> 12 <% end %> 13 <% end %> 14 </div> 15 16 <div class="card-body"> 17 <h5 class="card-title"><a href="/items/<%= item.id %>"><%= item.title %></a></h5> 18 <p><%= item.price %></p> 19 <p><%= item.explain %></p> 20 <p><%= item.user_id %>さん</p> 21 </div> 22 </div> 23 24 </div> 25 <% end %> 26 <%= paginate @items %> 27 </div> 28</div>
schema.rb
ruby
1 create_table "item_images", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| 2 t.string "image" 3 t.integer "item_id" 4 t.datetime "created_at", precision: 6, null: false 5 t.datetime "updated_at", precision: 6, null: false 6 end 7 8 create_table "items", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| 9 t.string "title", null: false 10 t.text "explain", null: false 11 t.integer "price", null: false 12 t.bigint "saler_id" 13 t.bigint "buyer_id" 14 t.datetime "created_at", precision: 6, null: false 15 t.datetime "updated_at", precision: 6, null: false 16 t.bigint "user_id" 17 end
item.rb
ruby
1class Item < ApplicationRecord 2 belongs_to :user 3 has_many :item_images, dependent: :destroy 4 5 accepts_nested_attributes_for :item_images, allow_destroy: true 6end
item_image.rb
ruby
1class ItemImage < ApplicationRecord 2 belongs_to :item 3 mount_uploader :image, ImageUploader 4end
何卒よろしくお願いします。