我有一个软件表,有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 %>
我需要将软件文本字段更改为下拉框,抱歉,如果这很模糊,我之前没有与下拉框有任何关系。
答案 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
中调用它时,就像你想要的那样显示它。