使用以下check_box_tag:
<%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
我只能单向更新布尔属性: 从false到true。
默认情况下未选中(因为object.boolean_attribute是false),我选中并提交表单,会发布一个:boolean_attribute => 1的参数。
但是,当我尝试从true更新为false时,没有参数被传递,因此boolean_attribute仍然为true。
换句话说,当默认选中(因为object.boolean_attribute为true)时,我取消选中并提交表单,不会发布:boolean_attribute => 0的参数。
如何使check_box_tag在取消选中时发布:boolean_attribute => 0参数?
从API中,我无法确定是否有一些选项可以轻松实现: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag 谢谢。
由于某些原因,我无法理解,在我的实际代码中(具有嵌套的多对多关联),hidden_field_tag 不起作用。
<%= hidden_field_tag 'order[preparations_attributes][][cooked]', nil %>
<%= check_box_tag 'order[preparations_attributes][][cooked]', '1', preparation.cooked? %>
现在我有相反的问题:我可以取消复选框并更新准备工作,但如果我勾选复选框,则会混淆参数。
以下是未选中框的发布参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>"", "recipe_id"=>"9", "id"=>"86", "quantities_attributes"=>[{"ingredient_id"=>"", "qty"=>"", "_destroy"=>"0"}, {"ingredient_id"=>"11", "qty"=>"5.0", "id"=>"193", "_destroy"=>"0"}], "_destroy"=>"0"}], "add_preparation"=>{"recipe_id"=>""}}, "continue"=>"Confirm", "id"=>"31"}
现在当我勾选复选框时,从"cooked"=>" "开始一片混乱,由于某些原因Rails过早地关闭了preparation_attributes哈希表!
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>""}, {"cooked"=>"1", "recipe_id"=>"9", "id"=>"86", "quantities_attributes"=>[{"ingredient_id"=>"", "qty"=>"", "_destroy"=>"0"}, {"ingredient_id"=>"11", "qty"=>"5.0", "id"=>"193", "_destroy"=>"0"}], "_destroy"=>"0"}], "add_preparation"=>{"recipe_id"=>""}}, "continue"=>"Confirm", "id"=>"31"}
编辑 #2::
我认为我遇到了一个与深度嵌套资源表单和参数传递相关的Rails bug: https://github.com/rails/rails/issues/5937
目前,我通过使用select_tag使其正常工作:
<%= select_tag 'order[preparations_attributes][][cooked]', options_for_select({yes: 1, no: 0}, preparation.cooked? ? 1 : 0) %>
我认为为了避免“隐藏字段陷阱”,使用select_tag进行切换是可接受的解决方法。
无论如何,感谢您提供的答案!
'order[preparations_attributes][][cooked]'
这样的东西而不是'object'
。 - jdoe:approved
字段。请查看我的UDP以了解如何通过check_box
处理这些字段。 - jdoe