0

私のアプリケーションでは、ActiveModelの検証は実行されていないようです。つまり、データが実際にどのように無効であっても、常にtrue(有効)に戻ります。Rails3/Mongoid検証が実行されていない

ruby-1.9.2-p290 :028 > QueueItem.validators 
=> [#<ActiveModel::Validations::PresenceValidator:0x007f8303adb190 @attributes=[:user], @options={:allow_blank=>false, :allow_nil=>false}>, #<ActiveModel::Validations::LengthValidator:0x007f8303ee5a60 @attributes=[:notes], @options={:minimum=>2, :allow_blank=>false}>] 
ruby-1.9.2-p290 :029 > qi = QueueItem.new 
=> #<QueueItem _id: 4edf5a0535be359a79000004, _type: nil, created_at: nil, updated_at: nil, user_id: nil, appointment_time: nil, notes: nil, called: false, visited: false, rejected: false> 
ruby-1.9.2-p290 :030 > qi.notes = "x" 
=> "x" 
ruby-1.9.2-p290 :031 > qi.valid? 
=> true 

検証として、モデルに登録されているという事実にあるようだ。

その後
class QueueItem 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    belongs_to :user 

    field :appointment_time, type: DateTime, allow_nil: true 
    field :notes, type: String, allow_nil: true 
    # field :position, type: Integer, default: 0 

    validates :user, presence: true, allow_blank: false, allow_nil: false 
    validates_length_of :notes, :minimum => 2, allow_blank: false 
end 

、あなたが保存したり、不正なデータを持つレコードを検証しようと、これはあなたが得るものですQueueItem.validationsで示される。なぜ、彼らはいつも真実に戻りますか?これはこのモデルだけでなく、私のアプリケーションのすべてのモデルで起こっています。

UPDATE

私は、カスタムバリデータを追加し、それが正常に発射されます。今

validate :test_validation 

def test_validation 
    logger.info ":test_validation has fired" 
    self.errors[:base] << "Something is royally screwed!" 
end 

私はmodel.valid?を呼び出すとき、それはfalseを返し、ロガーは、そのメッセージを出力します。カスタムバリデーターは実際にオブジェクトにエラーを追加し、falseを返します。まだ標準のActiveModelのものが実行されていない理由は明らかではありません。これらをトレースする方法はありますか?

+0

奇妙なことに、なぜこれが起こっているのかは分かりません –

答えて

1

したがってlocals/en.ymlファイルのerrors:セクションに破損した文字列があることが判明しました。

関連する問題