我的表单上有一个下拉列表,它是另一个表的外键:
<div class="field">
<td><%= f.label "#{column_name}" %></td>
<td><%= f.collection_select "#{column_name}", Table.all, :id, :message_id %></td>
</div>
&#34;表&#34;有一列&#34; message_id&#34;这是一个不同表的foreign_key&#34;消息&#34;。
&#34;消息&#34; table包含我的应用程序中的所有文本/字符串。
当我在我的页面上加载此代码时,它会给我一个所有记录的下拉列表,但它只显示指向&#34;消息&#34;的外键ID号。表
如何更改下拉列表中的外键ID号码以切换我在Messages表上的消息内容?
答案 0 :(得分:0)
试试这个:
f.input "#{column_name}", :collection => Table.all.collect {|t| [Messages.find(t.message_id).message_content , t.id]}
这不是很有效,但我认为会做这项工作。
答案 1 :(得分:0)
只需在Table模型中创建一个方法,该方法从相关的Messages中获取所有Message内容。像:
#table.rb
def message_content
self.message.message_content #a trip to the database every select iteration over Table.all
end
当然,这不是很好的性能(看看所有这些行程到DB)。因此,您可以使用before_save挂钩将消息内容与表记录关联:
#table.rb
before_save :associate_message_content
def associate_message_content
unless message.nil?
self.message_content = message.message_content
end
end
def message_content
self.message_content #no trips to the database
end
在你的选择中只需调用方法:
#view
<div class="field">
<td><%= f.label "#{column_name}" %></td>
<td><%= f.collection_select "#{column_name}", Table.all, :id, :message_content %></td>
</div>