如何使用form_tag更新params

时间:2010-04-28 16:08:25

标签: ruby-on-rails

我一直在为Rails中的问题苦苦挣扎几天,但仍无法找到解决方案。你能帮帮我吗?

问题:我有一个搜索框,在params结构中放置:search_string条目。我使用form_tag,它工作正常。

<% form_tag :controller=> 'items', :action => 'find' do %>
    <%= text_field_tag :search_string, params[:search_string] %>
<% end %>

问题是我想添加和更新其他params键值(在另一个视图中),例如:start_date,以过滤search_string结果。这是我在视图中使用的代码剪切:

<% form_tag :controller=> "items", :action => "find", :params => params do %>
    <%= hidden_field_tag  :date_start,  '2010-04-01' %>
    <%= submit_tag 'April' %>
<% end %>

<% form_tag :controller=> "items", :action => "find", :params => params do %>
    <%= hidden_field_tag  :date_start,  '2010-03-01' %>
    <%= submit_tag 'March' %>
<% end %>

当我第一次点击“四月”提交按钮时,参数被正确传递给控制器​​(即有一个参数[:start_date] ='四月')。但是,当我尝试之后单击“March”按钮时,params [:start_date]不会更新。我肯定认为这是一个愚蠢的新手错误,但我无法弄清楚如何正确使用form_tag。你能告诉我我做的事情吗?否则,你能告诉我哪个是使用form_tag更新params的最佳方法吗?非常感谢你提前。

米克尔

1 个答案:

答案 0 :(得分:0)

您可能想要做的是强制合并参数,类似于:

<% form_tag :controller=> "items", :action => "find", :params => params.merge(:date_start => '2010-03-01') do %>
    <%= submit_tag 'March' %>
<% end %>

你有可能无意中提交了两个相同的参数,其中第一个被选中,但由于“第一个”没有明确定义,你可能会得到不一致的结果。

查看日志文件,了解从这两种表单中收到的参数。