Rails 3,将日期参数传递给url

时间:2012-02-21 16:29:44

标签: ruby-on-rails-3

我的控制器中有一个搜索操作,看起来像这样......

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'

有什么想法吗?

1 个答案:

答案 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>

..自动将控制器中的参数自动插入到我的网址中。