8

私はこのプロジェクトモデルを持っています:

class Project < ActiveRecord::Base
  validates :status, :inclusion => { :in => ['active', 'closed'] }
  validates :title,
            :presence => true,
            :length => { :in => 4..30 }

  before_save :set_default_status_if_not_specified

  private 

  def set_default_status_if_not_specified
    self.status = 'active' if self.status.blank?
  end
end

次のような新しいオブジェクトを作成すると:

Project.create!(:title => 'Test 2', :pm_id => 1)

次のエラーが表示されます:検証に失敗しました: ステータスがリストに含まれていません しかし、ステータス フィールドは保存する前に入力する必要があります。

4

2 に答える 2

19

これは、 before_saveに検証するためです。

http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

(-) save

(-) valid

(1) before_validation

(-) validate

(2) after_validation

(3) before_save

(4) before_create

(-) create

(5) after_create

(6) after_save

(7) after_commit

あなたは試すことができbefore_validationますか?

于 2012-06-17T15:17:29.477 に答える
2

before_saveコールバックの前に検証が行われるようです。おそらく、before_validation代わりに試してみたいですか?

于 2012-06-17T15:16:28.860 に答える