У меня проблемы с доступом к атрибутам объединения в Rails3.
Существует две модели / таблицы: Place и Address.В одном месте может быть много адресов (например, конкретный адрес улицы, «угол» адреса и т. Д.).По историческим причинам таблицы не соответствуют стандартным соглашениям Rails:
class Place < ActiveRecord::Base
set_table_name :PLACE
set_primary_key :PLACE_ID
has_many :addresses, :class_name => "Address", :foreign_key => :PLACE_ID
end
и
class Address < ActiveRecord::Base
set_table_name :ADDRESS
set_primary_key :ADDRESS_ID
belongs_to :place, :foreign_key => "PLACE_ID"
end
Я пытаюсь получить все адреса для одного конкретного места:
pa = Place.joins(:addresses).where(:place_id => 68)
Сгенерированный SQL выглядит нормально:
pa.to_sql
"SELECT [PLACE].* FROM [PLACE] INNER JOIN [ADDRESS] ON [ADDRESS].[PLACE_ID] = [PLACE].[PLACE_ID] WHERE ([PLACE].[place_id] = 68)"
Возвращенное отношение также имеет правильный размер, поскольку с этим конкретным местом связано 6 адресов:
irb(main):050:0> pa.size
=> 6
Однако возвращенное отношение pa содержит только атрибуты модели Place, оно не содержит никаких атрибутов модели Address.
Pre Rails3 Я использовал для выполнения find_by_sql и мог получить доступ к атрибутам двух соединенныхлегко возвращать таблицу в возвращенном хэше, однако я просто не могу заставить Rails3 открыть мне атрибуты из объединенной таблицы адресов.
Мне, должно быть, здесь не хватает чего-то очень простого - кто-нибудь захочет указать мне на это?