7

RoRを使い始めたばかりで、質問があります。現在のタイムスタンプ(または任意のタイプの時間)をモデルに挿入するにはどうすればよいですか?以下に、ログ関数の作成を示します。

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
4

2 に答える 2

25

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

タイムスタンプを手動で作成する場合はtimestamp_field、データベースに日時列(例)を追加before_saveし、モデルでコールバックを使用します。

class Log < ActiveRecord::Base
  before_save :generate_timestamp

  def generate_timestamp
    self.timestamp_field = DateTime.now
  end
end
于 2013-03-15T00:36:29.513 に答える
4

railsジェネレーターを使用すると、たとえば、rails generate model Lograilsは2つのタイムスタンプフィールドを自動的に作成します。

created_atこれらのフィールドは両方とも、そのレコードでupdated_at新しいレコードを作成するときにRailsによって入力されます。または、レコードの属性を更新するとき、またはモデルのインスタンスで メソッドを使用するときにのみ、フィールドが更新されます。Log.newsaveLog.createupdated_attouch

ここで、タイムスタンプタイプを使用して別のフィールドを作成する場合は、次のようにモデルに列を追加する移行を行うことができます。

rails generate migration add_some_timestamp_field_to_logs my_timestamp_field:timestamp

これにより、とのようにmy_timestamp_field、タイプで名前が付けられた列を追加する移行が生成されます。timestampcreated_atupdated_at

于 2013-03-15T00:37:47.823 に答える