我需要获取控制器中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'
答案 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