2009-04-20 21 views
4

Кто-нибудь знает плагины Ruby on Rails time_select, которые имеют только один флажок? Таким образом, в поле выбора есть такие записи, как «9:00 AM», «9:15 AM» и т. Д.?Ruby on Rails Плагины time_select?

Я видел несколько плагинов, но ничего подобного.

Спасибо!

ответ

1

Таким образом, вы хотите все возможное время с шагом 15 минут в одном списке? Я бы рекомендовал сделать это, используя стандартный плагин time_select.

Отредактировано для добавления Я ничего не знаю об этом, и я не думаю, что это было бы там, вам, вероятно, придется сделать свой собственный.

9

Я использую time_selects ALOT в своих приложениях и решаю проблемы с выбором времени с двумя незначительными корректировками.

Первого minute_step:

f.time_select :start_of_shift, :minute_step => 15 

Это позволит сократить это гнусные минуты поля выбора в очень управляемый размер (! Выбрать свой собственный)

Кроме того, я нашел модуль рубинового, что я месте я мой инициализатор папку всех моих приложений на основе времени:

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 

EDIT: найден источник рубинового файла! Найдите его здесь: http://brunomiranda.com/past/2007/6/2/displaying_12_hour_style_time_select/

+0

да я видел, что хорошо, но это не делает работу в одном выберите. Я должен закончить кодирование решения через час или около того. я отправлю его в ближайшее время – Tony

+1

Я изменил приведенный выше ответ для работы с Rails 3, а для 12 часов вместо 0 утра. См. Https://gist.github.com/1340125. –

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 
1

Если вы хотите сделать это с помощью Rails 3, вам нужно назначить html_options пустой строке (html_options = ""). build_select требует, чтобы опции выбора были html. В противном случае вы получите can't convert Array into String.

См. Документацию build_select.

Просто дружественное обновление. Наслаждаться.