0

我有一个devices与表相关的pops表(存在点)。

在我的DeviceCRUD 应用程序中,我可以显示特定设备的条目,例如:

<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="#&lt;Pop:0x1114a7330&gt;"><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"
4

1 回答 1

1

尝试

<p>pop id: <%= @d.pop_id.id %></p>

在您的设备型号中,

belongs_to :pop_id, :class_name => "Pop", :foreign_key => "pop_id"

因此,on@d.pop_id将从设备的 pops 表中获取相关记录@d。但是你的关联的命名略有不同,如果你可以在你的设备模式下使用跟随,它会更好看。它只是一个建议。

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
于 2013-08-06T09:36:22.507 回答