使用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
,並得到:
的ActiveRecord :: RecordInvalid:驗證失敗:用戶可以不可空白
但是,如果不是最後一個li ne我:
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
謝謝約翰,這有幫助,但爲什麼驗證「用戶不能爲空」甚至被觸發那裏?因爲我正在爲用戶分配狀態。如果驗證錯誤發生在實際創建狀態時,我想我會不會感到驚訝。這是故意的:-)我的應用程序將允許共享狀態。 – pingu