Ruby on Rails - 将日期从text_field传递给控制器

时间:2013-12-30 21:01:05

标签: ruby-on-rails ruby

我需要将text_field中的日期发送到控制器。在视图中我有这个

<%= link_to 'Click me', :url => {:controller => 'test', :action => 'action', :submit => 'field_to_submit', :method => :post, :remote => true} %>

<%= form_tag(my_path, :method => "get") do %>
    <%= label_tag(:q, "Choose date:") %>
    <%= text_field_tag(:q) %>
    <%= submit_tag("New Date") %>
<% end %>

在控制器中我有这个:

def action
    if(params.has_key?(:q))
      @temp=params[:q]
    end
...

问题在于,如果我把例如2014-01-20放在text_field中,我将在@temp变量中得到1993。意思是,不是将日期作为字符串传递(我想要的,所以我可以使用后者)它将“ - ”解释为操作并给出结果。

我能以任何方式纠正这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

也许用以下内容解析该字符串:

> DateTime.parse(params[:q]) # if params[:q] is a date
=> Mon, 20 Jan 2014 00:00:00 +0000 

然后你可以适当地处理它。

答案 1 :(得分:0)

您是否尝试过strptime

DateTime.strptime("2014-01-20","%Y-%m-%d")
#=> #<DateTime: 2014-01-20T00:00:00+00:00 ((2456678j,0s,0n),+0s,2299161j)>

答案 2 :(得分:0)

我猜ERB正在评估在发送到控制器之前提供的字符串,因此您可以尝试以下方法:

<%= link_to 'Click me', :url => {:controller => 'test', :action => 'action', :submit =>     'field_to_submit', :method => :post, :remote => true} %>

<%= form_tag(my_path, :method => "get") do %>
  <%= label_tag(:q, "Choose date:") %>
  <%= text_field_tag(:q).to_s %>
  <%= submit_tag("New Date") %>
<% end %>