我在访问 Rails3 中的连接属性时遇到问题。
有两个模型/表格:地点和地址。一个地方可以有多个地址(即特定的街道地址、地址的“角落”等)。由于历史原因,这些表不遵循标准的 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 模型的任何属性。
在 Rails3 之前,我曾经做一个 find_by_sql 并且可以在返回的哈希中轻松访问两个连接表的属性,但是我根本无法让 Rails3 向我显示连接地址表中的属性。
我必须在这里遗漏一些非常基本的东西 - 有人愿意向我指出吗?