在Rails中,我想重写关联的行为。例如,默认情况下,如果Person has_many :hats
,调用some_person.hats
将使用person.id
和hat.person_id
执行简单的连接。
我想修改该查询以包含一些其他条件。例如,也许一个人的帽子收藏应该只是适合他们国家的帽子。
似乎我可以这样做:
class Person < ActiveRecord::Base
has_many :hats, :through => :country do
# John lives in Canada, so he gets a baseball cap and a hockey helmet
self.country.hats
end
end
我可以像这样控制关联返回什么吗?如果不是,一个范围是最好的解决方案吗?
我知道这是一个愚蠢的例子,但是解释我需要这个的领域逻辑对这里的每个人来说都太无聊了。:)
作用域可能是您最好的选择,因为它们在您的关联之外是可链接和可重用的。否则,您可以使用关联扩展。查看这个帖子了解更多信息。协会扩展