我可以覆盖关联方法返回的内容吗?

时间:2011-04-28 12:07:14

标签: ruby-on-rails ruby-on-rails-3 activerecord

在Rails中,我想覆盖关联的行为。例如,默认情况下,如果Person has_many :hats,则调用some_person.hats将使用person.idhat.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

我可以控制关​​联返回的内容吗?如果没有,范围是否是最佳解决方案?

我知道这是一个愚蠢的例子,但解释我需要的域逻辑对于每个人来说都太无聊了。 :)

1 个答案:

答案 0 :(得分:1)

范围可能是您的最佳选择,因为它们可以在您的关联之外进行链接和重复使用。否则,您可以使用关联扩展。有关详细信息,请查看此threadAssociation Extensions