collection_check_boxes的返回变量是什么?

时间:2014-04-12 01:26:20

标签: ruby-on-rails ruby simple-form form-for

环境:Ruby 2.0.0,Rails 4.1,Windows 8.1

我在编辑视图中设置了collection_check_box。它在视图中工作,因为它检查模型实例的变量是否为真,如果它是假则不检查。我可以检查它或手动取消选中它。

但是,当我进入控制器#update动作时,我找不到任何结果的提示。 Params没有它。实例没有它,因为它是一个HABTM关系,这是有道理的,因为这是一个collection_check_box ......

所以,鉴于这种观点,我在控制器#update中做了什么来实际实现更新?我只需知道返回结果的位置,并可以从那里处理......

查看如下。例如,@ device.role_ids

<%= simple_form_for @device,
                    defaults: {label: false},
                    html: {class: 'form-vertical'},
                    wrapper: :vertical_form,
                    wrapper_mappings: {
                            check_boxes: :vertical_radio_and_checkboxes,
                            radio_buttons: :vertical_radio_and_checkboxes,
                            file: :vertical_file_input,
                            boolean: :vertical_boolean
                    } do |f| %>
    <%= f.input :name, disabled: true, label: "Device name is:", required: false %>
    <%= f.collection_check_boxes(:role_ids, Role.where(name: "admin"), :id, :name) do |b|
      b.label(:"data-value" => b.value) { b.check_box + " Administrator?" }
    end %>
    <%= f.input :chg_pwd, as: :boolean,
                checked_value: "true", unchecked_value: "false",
                inline_label: "Generate new password?" %>
    <%= f.button :submit %>
<% end %>

1 个答案:

答案 0 :(得分:0)

事实证明我在日志中发现了以下错误消息:

  

未经许可的参数:role_ids

这令我感到惊讶,因为我在允许的参数列表中有了role_ids:

params.require(:device).permit( ... :role_ids)

但是,我需要将其更新为:

params.require(:device).permit( ... :role_ids => [])

参考SO回答17879356

请注意,上面代码中的省略号表示我从此邮件中删除的其他参数。