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 %>

私が本当に求めているのは、 time_select ヘルパーで :value オプションを使用する方法だと思います。次のような試みでは、望ましい結果が得られないようです。

<%= 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 に答える