2013-03-15 7 views
5

RoRを使い始めました。質問:現在のタイムスタンプ(または任意のタイプの時間)をモデルに挿入するにはどうすればよいですか?下に、ログ関数createが表示されます。タイムスタンプをレールデータベースに挿入する方法

def create 
    @log = Log.new(params[:log]) 

    respond_to do |format| 
     if @log.save 
     format.html { redirect_to @log, notice: 'Log was successfully created.' } 
     format.json { render json: @log, status: :created, location: @log } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @log.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

レールジェネレータを使用してモデルを作成しましたか? –

答えて

18

Railsのモデルジェネレータは自動的にデータベース内created_atupdated_atdatetimeフィールドを作成します。これらのフィールドは、それぞれレコードが作成または更新されると自動的に更新されます。

タイムスタンプを手動で作成する場合は、データベースに日付/時刻の列(たとえば)を追加し、モデルにbefore_saveコールバックを使用します。例えばrails generate model Logレールをレール・ジェネレータを使用して

class Log < ActiveRecord::Base 
    before_save :generate_timestamp 

    def generate_timestamp 
    self.timestamp_field = DateTime.now 
    end 
end 
+0

しかし私はタイムスタンプを挿入します。 – venumaer

+0

私は手動のタイムスタンプの例で答えを更新しました。 –

+0

'self.timestamp_field = DateTime.now'と書く必要はありませんか? –

2

はあなたのために自動的に2つのタイムスタンプフィールドを作成します。

created_atupdated_atこれらのフィールドの両方が、あなたがLog.newをやって新しいレコードを作成する場合、そのレコードにsave、その後のRailsで満たされるでしょうかLog.createupdated_atフィールドを使用すると、レコードの属性を更新したり、メソッドを使用するときにのみ更新されますtouchモデルのインスタンスで

さて、あなたはこれがmy_timestamp_fieldをという名前の列を追加します移行を生成します。この

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp 

のようなモデルに列を追加し、移行を作ることができ、タイムスタンプ型の別のフィールドを作成したい場合timestampタイプの場合、created_atupdated_at

関連する問題