4

有人知道任何只有一个选择框的 Ruby on Rails time_select 插件吗?所以选择框有“9:00 AM”、“9:15 AM”等条目?

我见过一些插件,但没有这样的。

谢谢!

4

6 回答 6

9

我在我的应用程序中使用了 time_selects ALOT,并通过两个小调整解决了时间选择问题。

第一个是 minute_step:

f.time_select :start_of_shift, :minute_step => 15

这会将那个令人发指的分钟选择框切割成一个非常易于管理的大小(选择你自己的!)

另外,我发现了一个 ruby​​ 模块,我将它放在我所有基于时间的应用程序的初始化文件夹中:

module ActionView
module Helpers
class DateTimeSelector
def select_hour_with_twelve_hour_time 
  datetime = @datetime
  options = @options
  return select_hour_without_twelve_hour_time(datetime, options) unless options[:twelve_hour].eql? true
  if options[:use_hidden]
    build_hidden(:hour, hour)
  else
    val = datetime ? (datetime.kind_of?(Fixnum) ? datetime : datetime.hour) : ''
    hour_options = []
    0.upto(23) do |hr|
      ampm = hr <= 11 ? ' AM' : ' PM'
      ampm_hour = hr == 12 ? 12 : (hr / 12 == 1 ? hr % 12 : hr)              
      hour_options << ((val == hr) ?               
      %(<option value="#{hr}" selected="selected">#{ampm_hour}#{ampm}</option>\n) :               
      %(<option value="#{hr}">#{ampm_hour}#{ampm}</option>\n)             
      )
    end           

    build_select(:hour, hour_options)         
  end       
  end       
  alias_method_chain :select_hour, :twelve_hour_time     
  end   
end
end

我希望我能记住我在哪里找到它,这样我就可以相信它的来源,但简而言之,它允许我指定 12 小时的时间,将我的 time_select 字段分解为两个非常容易管理的简单选择。

f.time_select :start_of_shift, :twelve_hour => true, :minute_step => 15

编辑:找到 ruby​​ 文件的来源!在这里找到它:http: //brunomiranda.com/past/2007/6/2/displaying_12_hour_style_time_select/

于 2009-04-20T21:39:16.240 回答
7

这是一个非常基本的助手,把它放在你的应用程序助手中。您必须使用 Time.parse(params[:your_field]) 转换控制器/模型中的时间。这可能无法解决您的问题,但它至少应该为您指明正确的方向。

def time_select_tag(name)
  times = []
  (00..23).each do |i|
    (0..3).each { |inc| times << Time.parse("#{i}:#{inc * 15}") }
  end
  return select_tag name, options_for_select(times.map{|t| t.strftime('%I:%M%p')})
end
于 2009-12-08T20:01:32.220 回答
2

你看过12_hour_time吗?这在过去对我有用。

于 2010-01-08T17:14:59.400 回答
2

Rails ActionView::Helpers::DateHelper类对此有一个解决方案

<%= f.time_select :attribute_name, :minute_step => 15, :ampm => true %>
于 2011-10-26T08:31:27.493 回答
1

所以你想在一个选择列表中以 15 分钟为增量的每一个可能的时间?我真的建议使用标准的 time_select 插件来做。

编辑添加我不知道这样的事情,我不认为它会在那里,你可能必须自己做。

于 2009-04-20T17:22:10.883 回答
1

如果您希望使用 Rails 3 执行此操作,则需要分配html_options一个空字符串 ( html_options = "")。build_select要求选择选项为 html。否则你会收到can't convert Array into String

请参阅build_select文档。

只是一个友好的更新。享受。

于 2011-02-13T04:28:34.363 回答