Вы можете расширять ассоциации в ActiveRecord:
class User
has_many :locations do
def employees
# Use whatever logic you'd like here.
locations.find(:all, :include => [:employees]).collect {|l| l.employees }
end
end
end
u = User.find 1
u.locations.employees #=> calls our method defined above
И вот так:
http://ryandaigle.com/articles/2006/12/3/extend-your-activerecord-association-methods
Вы также можете попробовать has_many :through
:
class User
has_many :user_locations
has_many :locations, :through => :user_locations
# Not sure if you can nest this far, this guy has problems with it:
# http://tim.theenchanter.com/2008/10/how-to-hasmany-through-hasmany-through.html
#
# Maybe if locations was a habtm instead of :through? experiment with it!
#
has_many :employees, :through => :locations
end
u = User.find 1
u.employees #=> Uses associations to figure out the SQL
В общем, Ли, я обеспокоен вашей моделью данных. Отношения HABTM сейчас не очень рекомендуются. Использование has_many :through
позволяет назвать таблицу соединений, а затем вы можете хранить атрибуты в отношениях с лучшим деловым смыслом. Я бы сказал, что «Railsy» состоит в том, чтобы добавить некоторые сквозные отношения, чтобы показать больше моделирования предметной области.
Кроме того, некоторые примеры моделей помогут вам понять ваш вопрос.
Удачи!