使用以下check_box_tag:
<%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
Run Code Online (Sandbox Code Playgroud)
我只能在一个方向更新boolean_attribute:从false到true.
如果默认情况下未选中(因为object.boolean_attribute为false)并且我检查它然后提交表单,则发布a:boolean_attribute => 1参数.
但是,当我尝试从true更新为false时,没有传递param,因此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? %>
Run Code Online (Sandbox Code Playgroud)
现在我遇到了相反的问题:我可以取消选中复选框,并按照预期更新准备工作,但是如果我选中复选框,它会使参数更加混乱.
以下是未选中框的已发布参数:
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"}
Run Code Online (Sandbox Code Playgroud)
现在看看当我检查复选框时出现了一些混乱,从"cooked"=>""开始,出于某种原因,Rails太早关闭了prepare_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"=>""}, …Run Code Online (Sandbox Code Playgroud)