ruby on rails - 从模型下拉列表

时间:2017-10-01 12:24:16

标签: ruby-on-rails

我想从模型"公司"创建一个带有Ruby on rails的下拉列表。有一个项目电话"名称"。我希望下拉列表的长度与Company.count(动态)

一样长

例如,"公司"中的3个元素:

 <%= f.select :company_brand, [[Company.find(1).name, Company.find(1).id],[Company.find(2).name, Company.find(2).id],[Company.find(3).name, Company.find(3).id]]%>

4 个答案:

答案 0 :(得分:1)

collection_selectdocumentation)将提供您所需的内容:

  

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

     

对象类的方法的现有返回值集合的返回和标记。将选择从实例对象上的调用方法返回的值。如果调用方法返回nil,则不进行选择而不在选项哈希中包含:prompt或:include_blank。

     

:value_method和:text_method参数是要在集合的每个成员上调用的方法。返回值分别用作每个标记的值属性和内容。它们也可以是响应调用的任何对象,例如proc,将为集合的每个成员调用以检索值/文本。

对于您的用例,这意味着将代码更改为:

<%= f.collection_select(:company_brand, Company.all, :id, :name) %>

答案 1 :(得分:1)

你可以这样做:

<%= select(:company_brand, Company.all.collect {|c| [ c.name, c.id ] }, { include_blank: true }) %>

答案 2 :(得分:0)

你可以试试这个,我想这会对你有帮助。

<%= f.select :company_brand, options_from_collection_for_select(Company.all, "id", "name") %>

答案 3 :(得分:0)

#League - form.html.erb
<%= f.collection_select(:game_id, Game.order(:title), :id, :title, {prompt: true}, {class: 'form-control col-md-7 col-xs-12', required: "required"})%>

#.html_output
<select class="form-control col-md-7 col-xs-12" required="required" name="league[game_id]" id="league_game_id"><option value="">Please select</option>
    <option value="2">csgo</option>
    <option value="1">dota2</option>
</select>