2011-07-27 13 views
2

は、私が持っている:私のユニットテストでこのモデルを更新しても検証が行われないのはなぜですか? Railsの3.1と

class Status < ActiveRecord::Base 
    has_many :participations, :dependent => :destroy 
    has_many :users, :through => :participations 

    validates :users, :presence => true 
end 

を、私が行います

user = User.create(:name => "Bob") 
status1 = Status.create(:description => "available") 
user.statuses << status1 

とget:

のActiveRecord :: RecordInvalid:検証に失敗しました:ユーザーがすることができます空白にしないでください

ただし、最後のli私はそうです:

status1.users << user 

うまくいきます。

はなぜ検証がためにトリガーを取得ん:

user.statuses << status1 

UPDATE:フル

test "Return all statuses associated with the manager" do 
    manager = Manager.create(:email => "[email protected]", :password => "password", :password_confirmation => "password") 

    workshop = Workshop.create(:name => "Bob Autos") 
    manager.workshop = workshop 
    manager.save 

    user = User.create(:name => "a customer") 

    workshop.users << user 

    status1 = Status.create(:description => "Car is ready") 
    status2 = Status.create(:description => "problem with exhaust") 
    status3 = Status.create(:description => "parts delivered") 

    user.statuses << status1 
    user.statuses << status2 

    assert_equal([status1, status2], manager.statuses) 

    user.statuses << status3 

    assert_equal([status1, status2, status3], manager.statuses) 
    end 

答えて

2

検証はUserではなくStatusにあります。モデルの検証は、そのモデルが更新され、Userモデル(実際にはstatusesがフィールドではなく関連付けであるため)を実際に更新しなかった場合にのみトリガーされます。あなたが別の検証をトリガするために一つのオブジェクトに検証をしたい場合は

、あなたはvalidates_associatedを使用する必要があります。

class Status 
    validates_associated :users 
end 

(関連ノートでは、しかし、なぜ状況は、多くのユーザーを持っていない状況のように思えるはず? 1人のユーザーに限定してください)

+0

johnさん、ありがとうございます。なぜなら、 "ユーザーは空白にできません"そこ?私はユーザーをステータスに割り当てるプロセスにいるためです。ステータスが実際に作成されたときに検証エラーが発生した場合、私はあまり驚いていなかったと思います。意図的に:-)私のアプリは共有ステータスを許可します。 – pingu

1

テストするときにstatus1.usersコレクションは自動的に更新されていないためdo user.statuses << status1

+0

返信いただきありがとうございます。なぜ、コレクションが更新されていないと、検証が実行されますか? – pingu

+0

@pinguあなたのテストのための完全なコードを投稿できますか?更新された質問 – Ant

+0

、ありがとうございます。 – pingu

関連する問題