С 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: проверка не удалась: пользователи не могут быть пустыми
но, если вместо последней строки я сделаю:
status1.users << user
работает нормально.
Почему проверка запускается для:
user.statuses << status1
UPDATE:
тест в полном объеме
test "Return all statuses associated with the manager" do
manager = Manager.create(:email => "foo@bar.com", :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