如何在Rails中获取date_select字段的值?

时间:2014-10-14 14:53:17

标签: ruby-on-rails ruby-on-rails-4

我需要获取控制器中date_select字段的值。我还需要添加一个if语句,这样如果值为nil,它就不会尝试获取数据并输出错误。

这是我的date_select字段:

<%= date_select :regdate, :date, order: [:year, :month] %>

这是调试中的参数:

regdate: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  date(3i): '1'
  date(1i): '2014'
  date(2i): '10' 

4 个答案:

答案 0 :(得分:2)

在控制器端

regdate =  Date.new(params["regdate(1i)"].to_i,
                    params["regdate(2i)"].to_i,
                    params["regdate(3i)"].to_i)

或者这个,无论是什么进入你的参数

regdate =  Date.new(params["date(1i)"].to_i,
                    params["date(2i)"].to_i,
                    params["date(3i)"].to_i)

答案 1 :(得分:0)

我认为这种符号在代码中看起来更好:

foo = Date.new(*params[:foo].map { |_, v| v.to_i })

这要求您在prefix中设置date_select选项,将年,月,日的所有输入移动到哈希:

<%= f.date_select 'start_date', prefix: 'foo'} %>

答案 2 :(得分:0)

在控制器中使用

@regdate = params

在视图内部

<%= @regdate["regdate"]["date(3i)"]  %>
<%= @regdate["regdate"]["date(2i)"]  %>
<%= @regdate["regdate"]["date(1i)"]  %>

答案 3 :(得分:0)

我发现date_select有点麻烦,因为它会生成参数的格式,但是要使用手头的问题,这里有完整的解释。从视图开始:

# View
= date_select :regdate, :date, order: [:year, :month]

以上代码将提供“年和月”选择器。因此,在将传递给后端/ rails应用程序的参数中:

# Console
Parameters: {"utf8"=>"✓", "regdate"=>{"date(3i)"=>"1", "date(1i)"=>"2014", "date(2i)"=>"3"}, "commit"=>"Send"}

您只在寻找前两个值:年,月

在后端/控制器中,使用以下代码将参数转换回任何类型的日期:

# Controller
selected_date =  Date.new(
  params[:download_date]["download_date(1i)"].to_i,
  params[:download_date]["download_date(2i)"].to_i
  ).strftime("%Y%m%d")

请注意,在Date对象的末尾附加.strftime(“%Y%m%d”)可以让您以自己喜欢的任何方式格式化结果日期。在这种情况下,它将导致:

201403