这是我之前的一个问题的后续,因为我正在围绕 Ruby on Rails 弯曲我的大脑。
我有显示在网页上的项目,具体取决于它们的状态是否允许显示,使用命名范围 - 如果文档状态(“待售”、“已售”、“已删除”等)设置了 show_latest_items 标志为 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) %>
不会出错,但它也不会过滤掉没有照片的项目。
我尝试了各种其他方法,以及尝试自定义查找器、为照片编写名称范围,但没有什么意义重大。我应该从不同的角度来解决这个问题吗?