Rails form_for选择框,显示所有记录但存储ID

时间:2012-08-21 09:08:16

标签: ruby-on-rails forms drop-down-menu dropdownbox

我有一个软件表,有4个字段; id,供应商,标题和版本。我的许可证表格中需要一个下拉框,它会显示如下所示的每条记录:vendor - title - edition,但只会将所选记录的ID保存到数据库中。我目前正在使用一个文本框,用户只需输入将保存到数据库的软件的ID。这是我目前的表格:

<%= form_for(@licenses) do |f| %>

<div class="well">
<%= f.label 'Software' %><br />
<%= f.text_field :software_id %>


<%= f.label 'Quantity' %><br />
<%= f.text_field :amount %>

<%= f.submit 'add'%>
</div>

<% end %>

我需要将软件文本字段更改为下拉框,抱歉,如果这很模糊,我之前没有与下拉框有任何关系。

2 个答案:

答案 0 :(得分:1)

结帐collection_select以填充投递箱

在像

这样的软件模型中创建一个方法
def title_edition
"#{self.vendor.name}- #{self.title} - #{edition}"
end
@softwares = Software.all #In controller

并在视野中

<%= f.collection_select :software_id ,@softwares,:id,:title_edition %>

答案 1 :(得分:0)

你希望collection_select有这样的东西:

f.collection_select(:software_id, Software.all, :id, :blah, :prompt => true) 

现在:blah是棘手的事情。在Software模型中,您需要定义一个返回您想要的连接字符串的方法;我叫它:blah引起你的注意,但它可以被命名为任何东西。它看起来像这样:

def blah
    "#{self.vendor}-#{self.title}-#{self.edition}"
end

这应该像你提到的那样返回字符串,当你在collection_select中调用它时,就像你想要的那样显示它。