无条件地调用has_many

时间:2014-01-12 23:45:07

标签: ruby-on-rails

问题

class Product < ActiveRecord::Base
   has_many: images , conditions: { size: 'small' }
end

现在,我希望在没有product.images的情况下访问condition。反正呢?我认为这是非常普遍的事情,所以可能类似unscoped类型的方法。

我知道我可以做类似下面的事情。

def all_images 
  Image.where(product_id: self.id)
end

对于包含conditions范围的所有此类类方法,在所有模型中创建此类类型的方法是不可行的。当我想在管理面板中显示时,我通常会调用无条件的方法。

2 个答案:

答案 0 :(得分:1)

据我所知,你不能轻易做到。并且有充分的理由,如果你需要&#34;所有&#34;关于收集的项目,为什么要首先添加条件?

如果您只想加载某些集合成员,那么他们的方法就是定义其他关联。

class Product < ActiveRecord::Base
   # has_many :small_images, -> { where size: 'small' }, class: 'Image' # <= Rails 4
   has_many :small_images , conditions: { size: 'small' }, class: 'Image'
   has_many :images
end 

我认为现在也更清楚了,您为所有图片调用product.images,为小图调用product.small_images

答案 1 :(得分:0)

您可以使用unscoped方法:

product.images.unscoped

但请注意,这将从关联代理中删除所有范围,以及默认的模型范围。