Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 简单形式的布尔值关联复选框_Ruby On Rails_Simple Form - Fatal编程技术网

Ruby on rails 简单形式的布尔值关联复选框

Ruby on rails 简单形式的布尔值关联复选框,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,我有一个用户模型,它有许多订阅s(电子邮件通知的类别)。用户是否收到与给定订阅对应的电子邮件取决于订阅中的活动字段是否为真。我试图使用Simple Form的关联方法,通过更改活动字段的值,允许用户订阅或取消订阅: = simple_form_for @user do |f| = f.input :name = f.input :email, label: "E-mail" = f.association :subscriptions, collection: @user.subsc

我有一个
用户
模型,它有许多
订阅
s(电子邮件通知的类别)。用户是否收到与给定订阅对应的电子邮件取决于订阅中的
活动
字段是否为真。我试图使用Simple Form的
关联
方法,通过更改
活动
字段的值,允许用户订阅或取消订阅:

= simple_form_for @user do |f|
  = f.input :name
  = f.input :email, label: "E-mail"
  = f.association :subscriptions, collection: @user.subscriptions,
    as: :check_boxes, value_method: :active, checked: lambda { |subscription| subscription.active? }

  = f.button :submit, "Save"

这似乎确实正确地显示了带有相应复选框的订阅,这些复选框的选中状态对应于数据库中的值。但是勾选或取消勾选框并提交表单似乎对数据库没有任何影响。

我认为您应该在这里使用
简单字段。这样,它将作为嵌套表单提交,并自动保存在数据库中。我不确定是否可以使用
关联
保存关联模型的属性

= simple_form_for @user do |f|
  = f.input :name
  = f.input :email, label: "E-mail"
  - f.simple_fields_for :publications do |subscription|
    # Here you have all simple_form methods available
    = subscription.check_box :active

  = f.button :submit, "Save"
还请注意,您必须为用户模型中的订阅添加accepts\u nested\u attributes\u。您需要在用户模型中添加以下内容:

attr_accessible :subscriptions_attributes

谢谢请注意,
attr\u accessible
在Rails 4中不可用。您需要将相关参数添加到用户模型的白名单中。我必须在这些属性中包括订阅
id
;否则,每次提交表单时,订阅数量将增加一倍。