мне нужна ваша помощь:has_many вообще не получает все, когда включает в себя (: объединение) .где ("? Association.something =", значение)
У меня есть три модели:
Фонограмма has_many PhonogramInstrument:
class Phonogram < ActiveRecord::Base
#... things
has_many :phonogram_instruments, source: :filter, dependent: :destroy, inverse_of: :phonogram
has_many :instruments, source: :filter, through: :phonogram_instruments
end
PhonogramInstrument belongs_to Фильтр:
class PhonogramInstrument < ActiveRecord::Base
belongs_to :phonogram
belongs_to :filter
end
и Фильтр:
class Filter < ActiveRecord::Base
end
Итак, мне нужно, чтобы извлечь все фонограммы, которые filter_id 30, например:
@phonograms = @phonograms.includes(:phonogram_instruments).where("phonogram_instruments.filter_id = ?", 30)
, который получает мне один список с одним объектом (именно то, что я, как ожидалось):
=> [#<Phonogram id: 14, title: "Test", version_title: "", notes: nil, isrc: "BR3BD1300003", release_date: "2013-02-01", created_at: "2014-02-23 16:54:24", updated_at: "2014-08-27 03:19:08">]
... но если я возьму этот объект и покажу его инструмент:
@phonograms.first.phonogram_instruments.inspect
=> #<ActiveRecord::Associations::CollectionProxy [#<PhonogramInstrument id: 51, phonogram_id: 14, filter_id: 30, created_at: "2014-08-27 07:01:27", updated_at: "2014-08-27 07:01:27">]>
, но в этой фонограмме у меня есть 7 PhonogramInstruments:
Phonogram.find(14).phonogram_instruments.inspect
=> "#<ActiveRecord::Associations::CollectionProxy [
#<PhonogramInstrument id: 25, phonogram_id: 14, filter_id: 25, created_at: \"2014-06-04 06:11:14\", updated_at: \"2014-06-04 06:11:14\">,
#<PhonogramInstrument id: 26, phonogram_id: 14, filter_id: 26, created_at: \"2014-06-04 06:11:14\", updated_at: \"2014-06-04 06:11:14\">,
#<PhonogramInstrument id: 48, phonogram_id: 14, filter_id: 49, created_at: \"2014-08-27 03:19:07\", updated_at: \"2014-08-27 03:19:07\">,
#<PhonogramInstrument id: 49, phonogram_id: 14, filter_id: 50, created_at: \"2014-08-27 03:19:08\", updated_at: \"2014-08-27 03:19:08\">,
#<PhonogramInstrument id: 50, phonogram_id: 14, filter_id: 29, created_at: \"2014-08-27 07:01:27\", updated_at: \"2014-08-27 07:01:27\">,
#<PhonogramInstrument id: 51, phonogram_id: 14, filter_id: 30, created_at: \"2014-08-27 07:01:27\", updated_at: \"2014-08-27 07:01:27\">,
#<PhonogramInstrument id: 52, phonogram_id: 14, filter_id: 31, created_at: \"2014-08-27 07:01:27\", updated_at: \"2014-08-27 07:01:27\">
]>"
Помогите пожалуйста! :)
Существует только одна функция PhonogramInstrument, соответствующая состоянию phonogram_id 14 и filter_id 30, поэтому ответ Илрейна был прав. –
Но фонограмма № 14 имеет 7 PhonogramInstrument, а где приносит мне ActiveRecord :: Ассоциации :: CollectionProxy с моей фонограммой № 14 с 1 фонограммойИнструмент –
Можете ли вы выполнить свой код '@ phonograms.includes (: phonogram_instruments) .where (" phonogram_instruments .filter_id =? ", 30)' в контроллере rails? И запустите SQL, сгенерированный рельсами, в окне командной строки базы данных. Вы можете опубликовать SQL и результат по вашему вопросу. –