我的控制器中有一个搜索操作,看起来像这样......
def search
@from_date = Date.new(params[:from_date][:year].to_i, params[:from_date][:month].to_i, params[:from_date][:day].to_i).to_s(:db)
@to_date = Date.new(params[:to_date][:year].to_i, params[:to_date][:month].to_i, params[:to_date][:day].to_i).to_s(:db)
@visits = Visit.search(from_date, to_date, current_user)
respond_to do |format|
format.html
end
端
如果我从此视图中调用此操作,则此方法正常。
<% form_tag "visits/search" do %>
<p/>
<%= 'Enter the dates to print' %>
<p/>
<%= select_date(Date.current, :order => [:month, :day, :year], :prefix=>'from_date') %>
- to-
<%= select_date(Date.current, :order => [:month, :day, :year], :prefix => 'to_date') %>
<%= submit_tag "Show me Visits" %>
<% end %>
但是,我试图用这个视图创建一个pdf,所以我需要将from_date和to_date传递给url。为此,我使用link_to语句...
<p><%= link_to "Print PDF", visits_search_path(format: 'pdf', from_date: @from_date, to_date: @to_date) %></p>
这给了我一个很好的形成的网址,看起来像......
/visits/search.pdf?from_date=2011-09-22&to_date=2012-02-22
但是当我点击此链接时,我收到错误..
TypeError in VisitsController#search
can't convert Symbol into Integer
Rails.root: /home/jlocklear/railsApps/ezslp_w_prawn
Application Trace | Framework Trace | Full Trace
app/controllers/visits_controller.rb:104:in `[]'
app/controllers/visits_controller.rb:104:in `search'
有什么想法吗?
答案 0 :(得分:0)
所以问题是我需要在link_to语句中构建正确的params。而是使用像
这样的东西visits_search_path(格式:'pdf',from_date:@ from_date,to_date:@to_date)
我真的需要更类似于......的东西。
visits_search_path('from_date [year]'=&gt; @ from_date.year,'from_date [month]'=&gt; @ from_date.month,...)
我的解决方案最终是使用params.merge方法,如...
<p><%= link_to "Print PDF", visits_search_path(params.merge(format: 'pdf')) %></p>
..自动将控制器中的参数自动插入到我的网址中。