我试图找出处理时间字段的最佳方法。我有一个烹饪时间和准备时间的食谱应用我正在努力,如果我可以允许用户基本上写在文本字段,但他们选择,然后将其转换为存储的持续时间,然后使用rails {我希望它{3}}显示它的功能。还没有能找到任何指示我正确的方向
编辑:所以我试着使用下面的Minutizer,但我一直在未定义的方法`minutize' for Chronic:Module
我使用下面的代码创建了一个新模块chronic.rb并将其保存在我的app / libs文件夹中
然后我在我的模型中包含Chronic但我无法摆脱上面的错误
答案 0 :(得分:1)
在慢性宝石中尝试此拉取请求 - https://github.com/mojombo/chronic/pull/231
能够处理以下时间:
将代码粘贴(PR https://github.com/TalkativeTree),因为它可能会被删除:
class Minutizer
def minutize(text)
text = pre_normalize(text)
extract_time(text)
end
def pre_normalize(text)
text.gsub!(/half an/, 'a half')
text.gsub!(/half a/, 'a half')
text = Numerizer.numerize(text.downcase)
text.gsub!(/an hour/, '1 hour')
text.gsub!(/a hour/, '1 hour')
text.gsub!(/a day/, '1 minute')
text.gsub!(/a minute/, '1 day')
text.gsub!(/a week/, '1 week')
# used to catch halves not covered by Numerizer. Use for the conversion of 'an hour and a half' Previous gsubs will have changed it to '1 hour and haAlf' by this point.
text.gsub!(/(\d+)\s?\w+?\s?and haAlf/) do |m|
m.gsub!(/\A\d+/, ($1.to_f + 0.5).to_s )
end
text.gsub!(/\s?and haAlf/, '')
text.gsub!(/haAlf/, "0.5")
text.gsub!(/(seconds|secnds|second|secnd|secs)/, 'sec')
text.gsub!(/(minutes|minute|mintues|mintes|mintue|minte)/, 'min')
text.gsub!(/(horus|hours|huors|huor|hrs|hr)/, 'hour')
text.gsub!(/(days|day|dy)/, 'day')
text.gsub!(/(weeks|wks|wk)/, 'week')
text
end
def extract_time(text)
minutes = extract(text, 'week')
minutes += extract(text, 'day')
minutes += extract(text, 'hour')
minutes += extract(text, 'min')
minutes += extract(text, 'sec')
end
def extract(text, option)
total = text.match(/(\d+.\d+|\d+)\s?(#{option})/)
return 0 unless total
digitize_time(total[1], option)
end
def digitize_time(time, option)
case option
when 'week'
multiplier = 7 * 24 * 60
when 'day'
multiplier = 24 * 60
when 'hour'
multiplier = 60
when 'min'
multiplier = 1
when 'sec'
multiplier = 1.to_f/60
end
return multiplier * time.to_f
end
end
只需将上述文件保存在某处,然后尝试以下操作:
您还需要' numerizer'宝石安装为minutizer工作。
☁ Documents irb
2.3.0 :001 > require './minutizer.rb'
=> true
2.3.0 :002 > require 'numerizer'
=> true
2.3.0 :003 > Minutizer.new.minutize('1.5 hours')
=> 90.0
2.3.0 :004 >