1

我有一个 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

4 回答 4

6

@invoice.start_time 是否分配了一个值?我猜不会。如果您使用该代码,@invoice.start_time 将返回 nil。因此 :value 将始终默认为 Time.now。这里的问题是您正在使用的条件语句。我假设当您尝试创建新数据时会发生这种情况。填写表格时,@invoice.start_time 未填写任何值。因此,在您保存之前,它始终为零。

我建议您将代码更改为:

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

实际上,如果您的问题可以更清楚地说明您希望 time_select 助手做什么,那么它会使事情变得更容易。

于 2010-04-19T03:45:36.817 回答
3

对我有用的是

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

请注意,我将其称为标签,而不是通常的 form_for 方式。

于 2012-06-12T14:07:36.980 回答
2

您实际上可以在启动模型时尝试在控制器级别设置 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 被神奇地设置了!希望这会有所帮助=)

于 2010-04-19T07:56:53.277 回答
1
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'})

它列在 rails文档中

我自己用过,效果很好。

于 2011-07-06T06:07:18.373 回答