Плагины Ruby on Rails time_select?
-
12-09-2019 - |
Вопрос
Кто-нибудь знает какие-нибудь плагины time_select для Ruby on Rails, которые имеют только одно поле выбора?Значит, в поле выбора есть такие записи, как «9:00», «9:15» и т. д.?
Я видел несколько плагинов, но ничего подобного.
Спасибо!
Решение
Итак, вы хотите, чтобы каждое возможное время с шагом в 15 минут было в одном списке выбора?Я бы очень рекомендовал сделать это с помощью стандартного плагина time_select.
Отредактировано, чтобы добавить Я не знаю ничего подобного и не думаю, что это будет доступно, вам, вероятно, придется сделать что-то свое.
Другие советы
Я МНОГО использую time_selects в своих приложениях и решаю проблемы выбора времени с помощью двух незначительных изменений.
Первый — минуту_шага:
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
РЕДАКТИРОВАТЬ:Нашел источник рубинового файла!Найдите это здесь: http://brunomiranda.com/past/2007/6/2/displaying_12_hour_style_time_select/
Вот действительно простой помощник, поместите его в свой помощник приложения.Вам придется преобразовать время в вашем контроллере/модели с помощью 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
Вы посмотрели 12_hour_time?Это сработало для меня в прошлом.
Рельсы ActionView::Helpers::DateHelper в классе есть решение для этой проблемы
<%= f.time_select :attribute_name, :minute_step => 15, :ampm => true %>
Если вы хотите сделать это с помощью Rails 3, вам нужно будет назначить html_options
в пустую строку (html_options = ""
). build_select
требует, чтобы параметры выбора были HTML.В противном случае вы получите can't convert Array into String
.
См. build_select документация.
Просто дружеское обновление.Наслаждаться.