开发者

Can I override what an association method returns?

开发者 https://www.devze.com 2023-03-01 12:23 出处:网络
In Rails, I want to override the behavior of an association. For example, by default, if Person has_many :hats, calling some_person.hats would do a simple join using person.id and hat.person_id.

In Rails, I want to override the behavior of an association. For example, by default, if Person has_many :hats, calling some_person.hats would do a simple join using person.id and hat.person_id.

I want to modify t开发者_如何学Gohat query to include some other criteria. For example, maybe a person's collection of hats should be just the hats that are appropriate to their country.

It seems that I could do something like this:

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

Can I control what an association returns like this? If not, would a scope be the best solution?

I know this is a silly example, but explaining the domain logic that I need this for would be way too boring for everyone here. :)


Scopes are probably your best option because they're chainable and reusable outside your association. Otherwise, you could use association extensions. Check out this thread for more info. Association Extensions

0

精彩评论

暂无评论...
验证码 换一张
取 消