如何设置在time_select视图助手时间?(How do I set a time in a t

2019-09-26 04:30发布

我有,我想设置一个时间值如下:a time_select;

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

这总是产生与当前时间,而不是@ invoice.start_time的值的时间选择。

@ invoice.start_time事实上是一个DateTime对象,但这被传递给时间选择就好了,如果我使用

<%= f.time_select :start_time %>

我想我真的问的是如何使用:与time_select帮手价值选择。 像下面这样尝试似乎并没有产生预期的结果;

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

Answer 1:

已@ 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帮手做的话,那就让事情变得更容易你可以在你的问题,以更加清晰。



Answer 2:

什么工作对我来说是

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

请注意,我把它叫做一个标签,而不是在通常的form_for方法。



Answer 3:

实际上,你可以尝试在控制器级别,当您启动模式,如设置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奇迹般地设定! 希望这有助于=)



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

它的轨道中列出的文件

用它自己和它的工作。



文章来源: How do I set a time in a time_select view helper?