at.*_*at. 27 ruby ruby-on-rails params ruby-on-rails-3 ruby-on-rails-3.2
使用select_date给我回params[:my_date]用year,month和day属性.如何轻松获取Date对象?我希望有类似的东西params[:my_date].to_date.
我也乐意使用date_select它.
joo*_*fsh 47
使用date_select分别为日,月和年提供3个单独的键/值对.因此,您可以将它们Date.new作为参数传递给创建新的Date对象.
示例date_select为Event模型返回了params :
"event"=>
{"name"=>"Birthday",
"date(1i)"=>"2012",
"date(2i)"=>"11",
"date(3i)"=>"28"},
Run Code Online (Sandbox Code Playgroud)
然后创建新Date对象:
event = params[:event]
date = Date.new event["date(1i)"].to_i, event["date(2i)"].to_i, event["date(3i)"].to_i
Run Code Online (Sandbox Code Playgroud)
您可以决定将此逻辑包装在一个方法中:
def flatten_date_array hash
%w(1 2 3).map { |e| hash["date(#{e}i)"].to_i }
end
Run Code Online (Sandbox Code Playgroud)
然后将其称为date = Date.new *flatten_date_array params[:event].但这不是真正属于控制器的逻辑,因此您可能决定将其移动到其他位置.你甚至可以将它扩展到Date类中,并将其称为date = Date.new_from_hash params[:event].
Vas*_*lis 13
这是另一个:
# view
<%= date_select('event', 'date') %>
# controller
date = Date.civil(*params[:event].sort.map(&:last).map(&:to_i))
Run Code Online (Sandbox Code Playgroud)
发现于http://kevinlochner.com/use-rails-dateselect-without-an-activerecord
我采用下面的方法,有以下好处:
xxx(1i)通过显式命名参数键xxx(3i)(因此可以通过更改为来修改以捕获小时和分钟Date)DateTime;和params即使这些参数填充有许多其他键值对,它也会从一组中提取日期。params是格式的哈希值{ xxx(1i): '2017', xxx(2i): 12, xxx(3i): 31, ... };是目标日期参数的date_key公共子串。xxx
def date_from_params(params, date_key)
date_keys = params.keys.select { |k| k.to_s.match?(date_key.to_s) }.sort
date_array = params.values_at(*date_keys).map(&:to_i)
Date.civil(*date_array)
end
Run Code Online (Sandbox Code Playgroud)
我选择将其作为 的类方法ApplicationRecord,而不是作为 的实例辅助方法ApplicationController。我的推理是,ActiveRecord 实例化器(即 Model.new)中存在类似的逻辑来解析从 Rails 表单传入的日期。