我有一个devices
与表相关的pops
表(存在点)。
在我的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
数据库中的实际外键,我想显示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
它,但似乎没有任何区别。
这个的输出是
<p>pop id: #<pop:0x1114a7330></pop:0x1114a7330></p>
但如果我对表中的任何其他属性执行相同操作,那么它会正确显示。
我确定我昨天也遇到了类似的情况,但这似乎取决于两个类之间定义关系的方式。为了完整起见,我将其添加到问题中:
设备.rb
belongs_to :pop_id, :class_name => "Pop", :foreign_key => "pop_id"
流行音乐.rb
has_many :devices, :foreign_key => "pop_id"