How do I set a time in a time_select view helper?

和自甴很熟 提交于 2019-12-24 08:49:49

问题


I have a time_select in which I am trying to set a time value as follows;

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

This always produces a time selector with the current time rather than the value for @invoice.start_time.

@invoice.start_time is in fact a datetime object but this is passed to the time selector just fine if I use

<%= f.time_select :start_time %>

I guess what I'm really asking is how to use the :value option with the time_select helper. Attempts like the following don't seem to produce the desired result;

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

回答1:


Has @invoice.start_time have a value assigned to it? I guess not. @invoice.start_time will return nil if you use that code.. and hence the :value will always default to Time.now. The problem here is the conditional statement that you are using. I am assuming this is happening when you try to create new data. When you filling up the form, @invoice.start_time is not filled with any value. Hence its nil throughout till you save.

I would suggest that you change the code to:

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

Actually if you could be more clear in your question as to what you want your time_select helper to do then it would make things easier.




回答2:


What worked for me was

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

Notice that I called it as a tag and not in the usual form_for way.




回答3:


You can actually try to set start_time at the controller level when you initiate the model, e.g.

in the controller:

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

in the action:

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

And you'll see that the start_time in the form is magically set! Hope this helps =)




回答4:


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'})

It's listed in the rails documentation

Used it myself and it worked.



来源:https://stackoverflow.com/questions/2664803/how-do-i-set-a-time-in-a-time-select-view-helper

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!