Rails - 显示十六进制值而不是id

时间:2013-08-06 09:34:40

标签: ruby-on-rails ruby

我有一个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="#&lt;Pop:0x1114a7330&gt;"><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"

1 个答案:

答案 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