1

我有一个嵌套窗体,它具有选择下拉菜单。将选择菜单传递给嵌套窗体的属性

如何将选定项目的ID传递到提交按钮时提交的属性?

在我的情况,这是我的嵌套形式的部分看起来像:

=select("dish", "menu_id", Menu.all.collect {|r| [ r.name, r.id ] }, {:include_blank => 'Choose a Menu'}) 
=f.hidden_field :_destroy 
=f.text_field :name, placeholder: "Name" 
=f.text_field :price, placeholder: "Price" 
=link_to "X", '#', :class => "remove_fields" 

当我点击提交按钮时,终端/主机显示以下被提交到数据库,但你”会注意到下拉菜单中的menu_id不是dishes_attributes的一部分,因为它不会与其他两个字段共享相同的输入idname

... "dishes_attributes"=>{"1342759486320"=>{"_destroy"=>"false", "name"=>"Dish 1", "price"=>"32"} ... 

从HTML源代码,nameprice输入字段会被分配以下idname

<input id="side_dish_dishes_attributes_1342759902918_name" name="side_dish[dishes_attributes][1342759902918][name]" placeholder="Name" size="30" type="text"/> 
<input id="side_dish_dishes_attributes_1342759902918_price" name="side_dish[dishes_attributes][1342759902918][price]" placeholder="Price" size="30" type="text"/> 

但我select下拉列表看起来是这样的:

<select id="dish_menu_id" name="dish[menu_id]"> 
    <option value="">Choose a Menu</option> 
    <option value="1">Menu 1</option> 
    <option value="2">Menu 2</option> 
</select> 

在父母_form页面,这里是调用看起来像然后调用th是部分:

=link_to_add_fields "Add New Dish", f, :dishes 

随着link_to_add_fields看起来像这样从我的helpers/application_helper.rb

def link_to_add_fields(name, f, association) 
    new_object = f.object.send(association).klass.new 
    id = new_object.object_id 
    fields = f.fields_for(association, new_object, child_index: id) do |builder| 
    render(association.to_s.singularize + "_fields", f: builder) 
    end 
    link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")}) 
end 

回答

2

此行

=select("dish", "menu_id", Menu.all.collect {|r| [ r.name, r.id ] }, {:include_blank => 'Choose a Menu'}) 

与表单对象使用它,而不是

=f.select("menu_id", Menu.all.collect {|r| [ r.name, r.id ] }, {:include_blank => 'Choose a Menu'}) 

我希望这会整理出你的身份证问题以及部分菜品属性

+0

非常感谢。这完美的作品!我知道我需要将'f'并入'select',但不知道如何。再次感谢! – FilmiHero 2012-07-20 15:21:10

+0

非常感谢,它对我有用......来自未来的讯息=) – 2014-07-25 21:46:22