如何在Rails 4中填充数据库条目的下拉列表

时间:2014-01-09 11:24:05

标签: ruby-on-rails twitter-bootstrap-3 simple-form

我对rails很新,我正在构建我的第一个应用程序。我在网上搜索了一个正确的答案,但找不到任何适用于我的案例。

我正在使用简单的表单,使用rails 4和bootstrap 3.我在(@employees)模型上有一个:location下拉列表,我想用@positions模型中的job_title列填充它。我使用了一个脚手架来生成我的位置MVC + job_title:string job_description:string。

如何使用:location(来自@positions模型)的值填充:job_title下拉列表(在我的员工表单上)?我目前的代码为:

<div class="col-md-6 pad-10"> 
<% options = options_from_collection_for_select(@positions, 'id', 'job_title') %>
<%= f.select :location, options, :input_html => { class: "form-control" } %>
</div>

但是如你所知,这不起作用。任何帮助表示赞赏!

  

解决方案:

<div class="col-md-6 pad-10"> 
<% options = options_from_collection_for_select(Position.all, 'id', 'job_title') %>
<%= f.select :location, options, :input_html => { class: "form-control" } %>
</div>

我使用Position.all代替@positions

4 个答案:

答案 0 :(得分:1)

因为您使用的是simple_form,所以可以为这样的集合渲染一个选择框:

<%= f.input :location, collection: @positions, label_method: :job_title, value_method: :id, input_html: { class: "form-control" }  %>

答案 1 :(得分:1)

options_from_collection_for_select需要一个数组。 Docs

因此,请尝试使用Modelname.all代替@positions或使用@positions重新声明@positions = Modelname.all

答案 2 :(得分:0)

如果您希望将id Position对象写入location字段,则应该为您执行此操作。如果您希望将job_title更改:id更改为:job_title

<div class="col-md-6 pad-10"> 
<%= f.label :location %><br />
<%= f.collection_select :location, @positions, :id, :job_title %>
</div>

答案 3 :(得分:0)

我使用Position.all代替@positions

<div class="col-md-6 pad-10"> 
<% options = options_from_collection_for_select(Position.all, 'id', 'job_title') %>
<%= f.select :location, options, :input_html => { class: "form-control" } %>
</div>