2016-02-29 75 views
0

我在我的形式保存选择框的选项内容,而不是价值

<%= 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> 

所以现在将保存选项数据库的价值,我需要它来保存选定选项的内容。 另外,我不能只用替换make.make_name在“options_for_select”,因为我需要值为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 
... 

,我不断收到此错误

找不到所有 '身份证' 使:(0,{ “使”=> “12”, “模式”=> “XPEDITOR” ,“start_year”=>“2002”,“end_year”=> “2010”})(搜索到0,但一直在寻找2)

这就是我一直

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

和多个其他的东西,但没有得到它的工作,我做错了什么?

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

make_id的值似乎是

(0,{ “使”=> “12”, “模式”=> “XPEDITOR”, “START_YEAR”=> “2002”, “END_YEAR”=> “2010”})

因为它试图找到与它作为身份证。

和参数在控制台看起来像

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

将内容分配到提交的隐藏字段?或者在提交后按价值查看内容。 –

回答

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

+0

编辑我的问题,如果你可以检查我在做什么错误,会很好:) –

+0

尝试在上面的'each_with_index'循环中打印'make_id'的值。还提供控制器实际接收的'params'。你可以从rails开发中获得'params'。登录或从控制台。 – Dharam

+0

编辑我的问题。 –