我有一个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