0

我有一个软件表,它有 4 个字段;id、供应商、标题和版本。我的许可证表单中需要一个下拉框,它会显示每条记录,如下所示:供应商 - 标题 - 版本,但只将所选记录的 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 %>

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

4

2 回答 2

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 %>
于 2012-08-21T09:19:17.567 回答
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它会像你想要的那样显示它。

于 2012-08-21T09:19:33.430 回答