我的User
模型有很多Subscription
个(电子邮件通知类别)。用户是否接收与给定订阅相对应的电子邮件取决于订阅中的active
字段是真还是假。我尝试使用简单表单的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"
这似乎正确显示了具有相应复选框的订阅,其复选框的状态对应于数据库中的值。但是检查或取消选中框并提交表单似乎对数据库没有任何影响。
答案 0 :(得分:2)
我认为你应该在这里使用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"
另请注意,您必须在User模型中添加accepts_nested_attributes_for:subscriptions。您需要在用户模型中添加它:
attr_accessible :subscriptions_attributes