我有一个应用程序在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中有什么变化让它抛出这个异常?
答案 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
这将允许创建关联的模型对象。