Rails находят по вложенным ассоциациям - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть модели:

class Model < ActiveRecord::Base
  has_many :model2
end
class Model2 < ActiveRecord::Base
  belongs_to :model
  belongs_to :model3
end
class Model3 < ActiveRecord::Base
  has_many :model2
end

Model3 имеет поле в дБ label.Как я могу найти модель по Model3 label?

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

первый: у вас отсутствуют ассоциации:

class Model < ActiveRecord::Base
  has_many :model2
end
class Model2 < ActiveRecord::Base
  belongs_to :model
  belongs_to :model3
end
class Model3 < ActiveRecord::Base
  has_many (or has_one?) :model2
end

, а затем Model3.where(:label => 'label').map(&:model2).map(&:model)

1 голос
/ 10 августа 2012

С помощью "объединений" вы можете фильтровать результаты в соответствии со связанными моделями

Model.joins(:model2s => :model3).where('model3.label' => 'label')

Это создаст только при вызове БД, так что это очень эффективно.Но объединения могут создавать дубликаты, когда существует более одного пути от модели к модели3.Если это возможно, вам нужно добавить

Model.select("DISTINCT model.*").joins(:model2s => :model3).where('model3.label' => 'label')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...