在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
我可以控制关联返回的内容吗?如果没有,范围是否是最佳解决方案?
我知道这是一个愚蠢的例子,但解释我需要的域逻辑对于每个人来说都太无聊了。 :)
答案 0 :(得分:1)
范围可能是您的最佳选择,因为它们可以在您的关联之外进行链接和重复使用。否则,您可以使用关联扩展。有关详细信息,请查看此thread。 Association Extensions