Rails params,params.merge错误

时间:2015-07-27 18:47:02

标签: ruby-on-rails params

为了通过ajax表单提交params 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 %>,params就会正确合并。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

我认为你最好不要将它们作为文章传给孩子。您可以使用f.hidden_field :filter而不是hidden_field_tag :filter,因此您会收到如下{ filter: "filter", article: {}}这样的参数。这样就不需要合并了。