Ruby on rails Rails-质量分配禁止嵌套属性的属性错误
我对嵌套属性的质量指定有问题。我在params中有一个散列,它表示一个对象,该对象由表单的Ruby on rails Rails-质量分配禁止嵌套属性的属性错误,ruby-on-rails,ruby-on-rails-4,params,mass-assignment,Ruby On Rails,Ruby On Rails 4,Params,Mass Assignment,我对嵌套属性的质量指定有问题。我在params中有一个散列,它表示一个对象,该对象由表单的表单_生成 我试图像这样授权参数,但我得到以下错误 ActiveModel::禁止属性错误 为了 以下是参数数组: {"utf8"=>"✓", "authenticity_token"=>"xxxxxxx", "country"=>{"language"=>"xxxx", "flag_path"=>"xxxxx"}, "commit"=>"Update", "c
表单_生成
我试图像这样授权参数,但我得到以下错误
ActiveModel::禁止属性错误
为了
以下是参数数组:
{"utf8"=>"✓",
"authenticity_token"=>"xxxxxxx",
"country"=>{"language"=>"xxxx",
"flag_path"=>"xxxxx"},
"commit"=>"Update",
"country_id"=>"xxxx"}
谢谢你的帮助
编辑:我知道用户允许是可能的代码>但如果我理解正确,这将授权ressource的所有参数,我只希望允许其中的一部分。使用参数所做的操作。require(:country)。permit
是正确的方法<如果不允许任何一个参数,则会引发代码>活动模型::禁止属性错误
,因此您可能错过了其中一个参数
检查参数散列中的所有参数并确保它们已被允许,例如,commit
和contry\u id
似乎丢失了。代码中有两个问题:
第一:
考虑下面是否是控制器中的许可证PARAM方法:
def country_param
params.require(:country).permit(:language, :flag_path)
end
那么您的更新操作应该如下所示:
@country.update(country_param)
不是
第二:为什么在更新操作中有country\u id
。它应该是id
。
没什么大不了的,两个都可以。但是使用country\u id
您将无法进行正确的编辑操作
无论如何,根据您的参数,您的操作应该如下所示:
def update
@country = Country.find(params[:country_id])
@country.update(country_param)
end
private
def country_param
params.require(:country).permit(:language, :flag_path)
end
你能给我看一下你的国家控制器代码吗?看来我不懂权限。现在我知道了。我唯一不明白的是id的事情…嗨,迪帕克,如果我没有它,我们是否需要它,而且我必须允许使用散列,例如:大量的key=>value,例如Thk。
@country.update(params[:country])
def update
@country = Country.find(params[:country_id])
@country.update(country_param)
end
private
def country_param
params.require(:country).permit(:language, :flag_path)
end