保存选择框选项内容而不是值

时间:2016-02-29 21:17:59

标签: ruby-on-rails ruby-on-rails-4

我的表格中有这些行

<%= f.fields_for :attached_vehicles do |av| %>
        <p>Select make</p>
        <%= av.select :make, options_for_select(@makes.collect { |make|[make.make_name, make.id] }), { include_blank: "Select make" }, {} %>
        ...
<% end %>

在html中呈现这个

<select name="diy[attached_vehicles_attributes][0][make]" id="diy_attached_vehicles_attributes_0_make">
    <option value="">Select make</option>
    <option value="1">ACURA</option>
    <option value="2">ALFA ROMEO</option>
    <option value="3">AM GENERAL</option>
    <option value="4">AMERICAN IRONHORSE</option>
    <option value="5">AMERICAN LAFRANCE</option>
    ...
</select>

所以现在它将所选选项的值保存到数据库中,我需要它来保存所选选项的内容。 另外,我不能在“options_for_select”中将make.id替换为make.make_name,因为我需要将值设为id,以便我的其他动态选择框根据所选选项获得正确的选项。

-------------------------------------------- -------------------------------------------------- --------------------------------------修改

所以我按照Dharam的建议做了

...
def diy_params
    params[:diy][:attached_vehicles_attributes].each_with_index do |make_id, index|
        params[:diy][:attached_vehicles_attributes][index][:make] = Make.find(make_id).make_name
    end
    params.require(:diy).permit(:title, :summary, :tip, :warning, attached_vehicles_attributes: [:make, :model, :start_year, :end_year], steps_attributes: [:step_content, add_images_to_steps_attributes: [:image]])
end
...

我一直收到此错误

  

无法使用'id'找到所有制作:(0,{“make”=&gt;“12”,“model”=&gt;“XPEDITOR”,“start_year”=&gt;“2002”,“end_year “=&gt;”2010“})(找到0结果,但正在寻找2)

所以我试过了

  

... Make.find(make_id.first.make).make_name

还有其他一些事情,但没有让它发挥作用,我做错了什么?

-------------------------------------------- -------------------------------------------------- -------------------------------------- EDIT2

make_id的值似乎是

  

(0,{“make”=&gt;“12”,“model”=&gt;“XPEDITOR”,“start_year”=&gt;“2002”,“end_year”=&gt;“2010”})

因为它试图找到Make with it as id。

控制台中的参数类似于

Parameters: {"utf8"=>"✓", "authenticity_token"=>"Kr4yvJUPCzUagUaW1glt69HEychEz+6QyHpGjKVKQ883rTUl0pZD+9SZSaQujHgM9k7jRt0vP1WTV5fMp8xyJw==", "diy"=>{"attached_vehicles_attributes"=>{"0"=>{"make"=>"12", "model"=>"XPEDITOR", "start_year"=>"2002", "end_year"=>"2010"}}, "title"=>"afaf", "summary"=>"AFSfAS", "tip"=>"FAF", "warning"=>"fdsgfsd", "steps_attributes"=>{"0"=>{"step_content"=>"gsdgsdg"}}}, "commit"=>"Create Diy"}

1 个答案:

答案 0 :(得分:1)

在处理控制器中的params之前,您可以执行以下操作:

params[:diy][:attached_vehicles_attributes].each do |index, make_attributes|
  params[:diy][:attached_vehicles_attributes][index]['make'] = Make.find(make_attributes['make']).name
end

您可以将Make模型替换为支持@models的实际模型。