环境: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 %>
答案 0 :(得分:0)
事实证明我在日志中发现了以下错误消息:
未经许可的参数:role_ids
这令我感到惊讶,因为我在允许的参数列表中有了role_ids:
params.require(:device).permit( ... :role_ids)
但是,我需要将其更新为:
params.require(:device).permit( ... :role_ids => [])
参考SO回答17879356
请注意,上面代码中的省略号表示我从此邮件中删除的其他参数。