我对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
。
答案 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>