我有一个devices
表,它与pops
表(Point of Presence)相关。
在我的Device
CRUD应用程序中,我可以显示特定设备的条目,例如:
<p>
<label for="d_description">Description</label><br/>
<%= text_field 'd', 'description' %>
</p>
<p><label for="d_pop_id">Pop ID</label><br/>
<%= text_field 'd', 'pop_id' %>
</p>
其中d
是所选设备的对象,但我不想从数据库中显示实际的外键id
,我想显示{{1}的相关名称} table:
pops
这给了我<p>
<label for="d_pop_id">PoP</label><br />
<%= collection_select 'd', 'pop_id', @pops, :id, :name, {:include_blank => "Select PoP..."}, {:selected => @d.pop_id} %>
</p>
属性中奇怪的十六进制字符串:
selected
所以,我尝试打印<select id="d_pop_id" name="d[pop_id]" selected="#<Pop:0x1114a7330>"><option value="">Select PoP...</option>
,它也做了同样的事情:
pop.id
我也尝试使用<p>pop id: <%= @d.pop_id %></p>
,但似乎没有任何区别。
这是
的输出.to_s
但如果我对表格中的任何其他属性执行相同操作,则会正确显示。
我确信我昨天有类似的东西,但它似乎取决于两个班级之间的关系定义方式。为了完整起见,我将其添加到问题中:
device.rb
<p>pop id: #<pop:0x1114a7330></pop:0x1114a7330></p>
pop.rb
belongs_to :pop_id, :class_name => "Pop", :foreign_key => "pop_id"
答案 0 :(得分:1)
尝试
<p>pop id: <%= @d.pop_id.id %></p>
在您的设备型号中,
belongs_to :pop_id, :class_name => "Pop", :foreign_key => "pop_id"
因此,@d.pop_id
将从设备@d
的pops表中获取相关记录。
但是您的关联命名略有不同,如果您可以在设备模式下使用以下内容,它看起来会更好。它只是一个建议。
belongs_to :pop #you no need to define the class_name and foreign_key explicitly. By default rails take care of these.
并且在您看来,您可以访问它
@d.pop.id