これは、Ruby on Rails について頭を悩ませているので、以前の質問に続きます。
ドキュメントのステータス(「販売中」、「販売済み」、「削除済み」など)に show_latest_items フラグが設定されている場合、名前付きスコープを使用して、ステータスが表示を許可するかどうかに応じて、Web ページに表示されるアイテムがあります。 1 にすると、関連付けられたアイテムをページに表示できるようになります。
class Item < ActiveRecord::Base
belongs_to :status
scope :show_latest_items, joins(:status).where(:statuses => {:show_latest_items => ["1"]})
end
class Status < ActiveRecord::Base
has_many :items
end
現在はこのように表示されています
<% latest_items = Items.show_latest_items.last(30) %>
<% latest_items.each do |i| %>
:
<% end %>
これで問題ありませんが、関連する写真がある場合にのみアイテムを表示したいと思います。
class Item < ActiveRecord::Base
has_many :item_photos
end
class ItemPhoto < ActiveRecord::Base
belongs_to :item
end
したがって、私の考えでは、名前付きスコープを使用して、表示するアイテムのリストを引き戻し、.present? を使用してそれらをフィルタリングできるはずです。または.any? メソッド。興味深いのはこれです:
<% latest_items = Items.show_latest_items.where(:item_photos.any?).last(30) %>
エラーを返します:
undefined method `any?' for :item_photos:Symbol
一方:
<% latest_items = Items.show_latest_items.where(:item_photos.present?).last(30) %>
エラーにはなりませんが、写真のないアイテムも除外されません。
私は他のさまざまな方法を試したり、カスタムファインダーを実行したり、写真の名前スコープを書いたりしましたが、あまり意味がありません. これに別の角度からアプローチする必要がありますか?