Как установить время в помощнике вида time_select? - PullRequest
1 голос
/ 19 апреля 2010

У меня есть time_select, в котором я пытаюсь установить значение времени следующим образом:

<%= f.time_select :start_time, :value => (@invoice.start_time ? @invoice.start_time : Time.now) %>

При этом всегда создается селектор времени с текущим временем, а не со значением для @ invoice.start_time.

@invoice.start_time на самом деле является объектом даты и времени, но он отлично передается селектору времени, если я использую

<%= f.time_select :start_time %>

Полагаю, я действительно спрашиваю, как использовать опцию: value с помощником time_select. Подобные попытки не дают желаемого результата:

<%= f.time_select :start_time, :value => (Time.now + 2.hours) %>
<%= f.time_select :start_time, :value => "14:30" %>

Ответы [ 4 ]

6 голосов
/ 19 апреля 2010

Имеет ли значение @ invoice.start_time присвоенное ему значение? Я думаю, нет. @ invoice.start_time вернет nil, если вы используете этот код ... и, следовательно, значение: всегда будет по умолчанию равно Time.now. Проблема здесь заключается в условном утверждении, которое вы используете. Я предполагаю, что это происходит, когда вы пытаетесь создать новые данные. Когда вы заполняете форму, @ invoice.start_time не заполняется никаким значением. Отсюда и ноль, пока вы не сохраните.

Я бы предложил изменить код на:

<%= f.time_select :start_time, :value => @invoice.start_time, :default => Time.now %>

На самом деле, если бы вы могли более четко указать в своем вопросе, что вы хотите, чтобы ваш помощник time_select делал, тогда это облегчило бы ситуацию.

3 голосов
/ 12 июня 2012

То, что сработало для меня, было

<%= time_select :object_name, :attribute_name, :default => {:hour => '10', :minute => '20'} %>

Обратите внимание, что я назвал его тегом, а не в обычном виде.

2 голосов
/ 19 апреля 2010

На самом деле вы можете попытаться установить start_time на уровне контроллера при запуске модели, например

в контроллере:

InvoicesController < ApplicationController
  # if you're creating a new object
  def new
    @invoice = Invoice.new(:start_time => Time.now)
  end

  # if you're updating an existing object
  def edit
     @invoice = Invoice.find(params[:id])
     @invoice.start_time = Time.now if @invoice.start_time.nil?
  end
end

в действии:

<% form_for @invoice do |f| %>
  ...
  <%= f.time_select :start_time %>
  ...
<% end %>

И вы увидите, что start_time в форме волшебно установлено! Надеюсь, это поможет =)

1 голос
/ 06 июля 2011
time_select(object, method, :prompt => {:hour => 'Choose hour', :minute => 'Choose minute', :second => 'Choose seconds'})

eg.time_select(:invoice, :start_time, :prompt => {:hour => '15', :minute => '30'})

Он указан в рельсах Документация

Использовал его сам, и это сработало.

...