轨道上的红宝石 - 简单形式中布尔值关联的复选框



我有一个User模型,它有许多Subscription(电子邮件通知的类别)。用户是否收到与给定订阅对应的电子邮件取决于订阅中的active字段是真还是假。我正在尝试使用Simple Form的association方法允许用户通过更改active字段的值来订阅或取消订阅:

= 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_fields_for。这样,它将作为嵌套表单提交并自动保存在数据库中。我不确定association是否可用于保存关联模型的属性。

= 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_nested_attributes_for :subscriptions。您需要在用户模型中添加以下内容:

attr_accessible :subscriptions_attributes

最新更新