当我们<%= f.datetime_select :somedate %>在表单中使用时,它会生成如下HTML:
<select id="some_date_1i" name="somedate1(1i)"> #year
<select id="some_date_2i" name="somedate1(2i)"> #month
<select id="some_date_3i" name="somedate1(3i)"> #day
<select id="some_date_4i" name="somedate1(4i)"> #hour
<select id="some_date_5i" name="somedate1(5i)"> #minute
Run Code Online (Sandbox Code Playgroud)
提交该表单后,将somedate1(<n>i)收到以下值:
{"date1(1i)"=>"2011", "date1(2i)"=>"2", "date1(3i)"=>"21", "date1(4i)"=>"19", "date1(5i)"=>"25"}
Run Code Online (Sandbox Code Playgroud)
如何将其转换为DateTime对象?我可以编写自己的方法来执行此操作,但由于Rails已经能够进行转换,我想知道是否可以调用Rails方法为我执行此操作.
问题是,我不知道在哪里寻找那种方法.
PS.我最终试图解决我遇到的另一个问题,这个问题是尝试找到另一个问题的解决方案的第一步.
Dyl*_*kow 24
保存模型时,此转换在ActiveRecord中进行.
你可以解决这个问题:
somedate = DateTime.new(params["date1(1i)"].to_i,
params["date1(2i)"].to_i,
params["date1(3i)"].to_i,
params["date1(4i)"].to_i,
params["date1(5i)"].to_i)
Run Code Online (Sandbox Code Playgroud)
DateTime::new是DateTime::civil(ruby-doc)的别名
ctc*_*rry 16
这段代码路径的开头似乎是正确的:
https://github.com/rails/rails/blob/d90b4e2/activerecord/lib/active_record/base.rb#L1811
找到这个很棘手!我希望这可以帮助您找到您需要的东西
您好我已在ApplicationController上添加以下内容,它执行此转换.
#extract a datetime object from params, useful for receiving datetime_select attributes
#out of any activemodel
def parse_datetime_params params, label, utc_or_local = :local
begin
year = params[(label.to_s + '(1i)').to_sym].to_i
month = params[(label.to_s + '(2i)').to_sym].to_i
mday = params[(label.to_s + '(3i)').to_sym].to_i
hour = (params[(label.to_s + '(4i)').to_sym] || 0).to_i
minute = (params[(label.to_s + '(5i)').to_sym] || 0).to_i
second = (params[(label.to_s + '(6i)').to_sym] || 0).to_i
return DateTime.civil_from_format(utc_or_local,year,month,mday,hour,minute,second)
rescue => e
return nil
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16335 次 |
| 最近记录: |