Как я могу найти объект rails на основе свойств их отношений has_many: through? - PullRequest
2 голосов
/ 10 июня 2011

Модели: Foo, Bar, Bonk

class Foo < ActiveRecord::Base
  has_many :bars
  has_many :bonks, :through => :bars
end

class Bar < ActiveRecord::Base
  has_many :bonks
end

Как я могу получить список Foo объектов, связанных с Bonk, чье имя "awesome"

Я знаю, что делать с Foo.find (...), который включает в себя: join и a: условие.Что я хочу сделать, так это избежать большого количества сырых sql (особенно, когда в центре более одной модели).

Что-то вроде

Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome'])

, которое, очевидно, не работает так, как оно генерирует

Select * from foos where bonks.name = 'awesome'

К сожалению, я имею дело с приложением rails 1.2здесь, но я не думаю эта функциональность изменилась с тех пор.

Ответы [ 2 ]

1 голос
/ 10 июня 2011
Foo.find(:all, :conditions=>["bonks.name = ?", 'awesome'], :include => :bonks)

должно генерировать что-то вроде

Select * from foos, bars, bonks where bars.foo_id = foo.id and bonks.bar_id = bar.id and bonks.name = 'awesome'
1 голос
/ 10 июня 2011

В 1.2 - ваш лучший выбор здесь - фрагмент SQL в аргументе :joins. Нет лучшего способа сделать это.

...