Rails 参数,params.merge 错误
Rails params, params.merge error
为了通过 ajax 表单提交保留参数 filter
和 filter_type
,我将它们作为隐藏字段传递到我的 article
表单中,结果给我这个参数哈希:
{"utf8"=>"✓", "_method"=>"patch", "article"=>{"filter"=>"xxx", "filter_type"=>"xxxx", ....actual fields of the model that got updated...}, "commit"=>"Update Article", "controller"=>"articles", "action"=>"update", "id"=>"xxx"}
这意味着我可以通过 params[:article]["filter"]
访问它们。
当我在控制器的更新方法中调用 params.merge(filter: params[:article]["filter"])
时,没有附加任何内容。当我尝试 params = params.merge(filter: params[:article]["filter"])
时出现此错误 NoMethodError (undefined method '[]' for nil:NilClass):
奇怪的部分来了:当我执行 @foo = params.merge(filter: params[:article]["filter"])
时,我也没有添加任何内容,直到我在视图中实际输出 @foo
。一旦在我看来 <%= @foo %>
,参数就会正确合并。有人可以解释这是为什么吗?
我认为您最好不要将它们作为文章子项传递。您可以使用 hidden_field_tag :filter
而不是 f.hidden_field :filter
,因此您将收到如下参数:{ filter: "filter", article: {}}
。这样就不用合并了
为了通过 ajax 表单提交保留参数 filter
和 filter_type
,我将它们作为隐藏字段传递到我的 article
表单中,结果给我这个参数哈希:
{"utf8"=>"✓", "_method"=>"patch", "article"=>{"filter"=>"xxx", "filter_type"=>"xxxx", ....actual fields of the model that got updated...}, "commit"=>"Update Article", "controller"=>"articles", "action"=>"update", "id"=>"xxx"}
这意味着我可以通过 params[:article]["filter"]
访问它们。
当我在控制器的更新方法中调用 params.merge(filter: params[:article]["filter"])
时,没有附加任何内容。当我尝试 params = params.merge(filter: params[:article]["filter"])
时出现此错误 NoMethodError (undefined method '[]' for nil:NilClass):
奇怪的部分来了:当我执行 @foo = params.merge(filter: params[:article]["filter"])
时,我也没有添加任何内容,直到我在视图中实际输出 @foo
。一旦在我看来 <%= @foo %>
,参数就会正确合并。有人可以解释这是为什么吗?
我认为您最好不要将它们作为文章子项传递。您可以使用 hidden_field_tag :filter
而不是 f.hidden_field :filter
,因此您将收到如下参数:{ filter: "filter", article: {}}
。这样就不用合并了