1

我有一个在 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 中发生了什么变化使其抛出这个异常呢?

4

1 回答 1

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

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

于 2015-01-23T05:13:05.070 回答