Ruby on rails Rails-质量分配禁止嵌套属性的属性错误

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

我对嵌套属性的质量指定有问题。我在params中有一个散列,它表示一个对象,该对象由表单的
表单_生成

我试图像这样授权参数,但我得到以下错误

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