使用关联保存模型时,Rails 4.2 ActiveModel :: ForbiddenAttributesError

时间:2015-01-21 14:29:05

标签: ruby-on-rails ruby rails-activerecord activemodel ruby-on-rails-4.2

我有一个应用程序在Rails 4.0.3上工作得很好今天当我尝试升级到Rails 4.2.0时,错误发生在下面的代码中:

    def self.create_comp(comp)
        c= Competition.new(comp[:competition])
        # add activities
        comp[:activities].each do |act|
            c.activities.new(act)
        end

        c.save!
        c
    end

错误消息:

ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):

此功能的作用是在交易中保存与其相关活动的竞争。

我将以下行定义为关联:

has_many :activities, autosave: true

那么Rails 4.2中有什么变化让它抛出这个异常?

1 个答案:

答案 0 :(得分:0)

@xiaopang,Rails 4.2仅允许强参数,因此您可以定义一个私有方法,您必须以这种方式允许模型级属性以及相关属性

def method
  params.require(:competition).permit!.tap do |while_listed|
    while_listed[:activities] = params[:activities]
  end
end

现在在调用类方法(create_comp)时传递此私有方法。

这可以解决您的问题。

您还有一种方法可以解决您的问题,例如 - 在控制器中定义私有方法,并将此方法名称作为参数发送。

def activities_params
  params.require(:activities).permit!
end

这将允许创建关联的模型对象。