【问题标题】:How do I set a time in a time_select view helper?如何在 time_select 视图助手中设置时间?
【发布时间】:2011-02-09 12:35:03
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails views helpers time-select


    【解决方案1】:

    对我有用的是

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

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

    【讨论】:

      【解决方案2】:
      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中列出documentation

      自己用过,效果不错。

      【讨论】:

      • 提示是不同的。尽管您可以使用它获得相同的结果,但它应该会告诉您“选择时间”之类的信息。但是,如果您想使用提示指定选择的值,那么相同的值将再次作为选项之一出现。
      • 要么只有我,要么这个助手的文档非常缺乏。
      【解决方案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 被神奇地设置了!希望这会有所帮助 =)

      【讨论】:

        【解决方案4】:

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

        我建议您将代码更改为:

        &lt;%= f.time_select :start_time, :value =&gt; @invoice.start_time, :default =&gt; Time.now %&gt;

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-03
          • 2012-02-03
          • 1970-01-01
          相关资源
          最近更新 更多