复选框以简单形式表示布尔值关联

时间:2014-04-08 05:47:39

标签: ruby-on-rails simple-form

我的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"

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

1 个答案:

答案 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