为了通过ajax表单提交params 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 %>
,params就会正确合并。有人可以解释为什么会这样吗?
答案 0 :(得分:2)
我认为你最好不要将它们作为文章传给孩子。您可以使用f.hidden_field :filter
而不是hidden_field_tag :filter
,因此您会收到如下{ filter: "filter", article: {}}
这样的参数。这样就不需要合并了。