Rails 参数,params.merge 错误

Rails params, params.merge error

为了通过 ajax 表单提交保留参数 filterfilter_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: {}}。这样就不用合并了