嵌套的白名单属性仍然是不允许的

Nested whitelisted attributes still unpermitted

我有三个模型:事件、event_user、event_users_day。

event 接受嵌套属性 event_user,它也接受 event_users_day 作为嵌套属性。

class Event < ActiveRecord::Base
  has_many :event_users, :dependent => :destroy, :inverse_of => :event
  accepts_nested_attributes_for :event_users, :allow_destroy => true
end

class EventUser < ActiveRecord::Base
  belongs_to :event, :inverse_of => :event_users
  has_many :event_users_days, :dependent => :delete_all
  accepts_nested_attributes_for :event_users_days, :allow_destroy => true
end

class EventUsersDay < ActiveRecord::Base
  belongs_to :event_users, inverse_of: :event_users_days
  validates :event_users, :presence => true
end

简单的嵌套形式非常简单:

= simple_nested_form_for :event_users do |f|
  = f.fields_for :event_users_days do |day|
    = day.input :event_day_id, as: :check_boxes, collection: @daygroups
= f.submit :class => "btn btn-success"

在我的控制器 event_user 中 event_users_days 的属性被列入白名单:

    @event_user = EventUser.new(params.permit(:event_id), params[:event_users].permit(:id, event_users_days_attributes: [:id, :event_day_id]))

但是当我保存它时,只有 EventUser 被保存,因为服务器告诉我不允许 event_users_days:

Unpermitted parameter: event_users_days

知道我做错了什么吗?

Unpermitted parameter 错误是字面意思,因此您的表单正在生成 event_users_days 参数而不是预期的 event_users_days_attributes 参数,Rails 正确地拒绝了该参数.

我已经很长时间没有使用 nested_form,如果您使用的是 Rails 4,那么我不确定这将是最佳选择(而且没有必要),但即便如此,我认为问题在于您使用的是 :event_users 而不是 @event_users - 但通常我建议切换到 simple_form 除非您使用的是旧的 Rails(如果你是,那么你应该在 SO 上提问时具体说明)。