开发者

has_many :through child and parent validations

I have a rails 3.0 has_many :X, :through => :something set up and i have a custom validator that does some custom validation on some complicated logic. I want to when you add anything to this many to many relationship both models are valid?

Project Class:

class Project < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignments

  validates :name, :presence => true
end

Assignment:

class Assignment < ActiveRecord::Base
  belongs_to :project
  belongs_to :user
end

User class with custom validator:

class MyCustomValidator < ActiveModel::Validator
  def validate( record )
    if record.projects.length > 3
      record.errors[:over_worked] = "you have to many projects!"
    end
  end
end

class User < ActiveRecord开发者_开发技巧::Base
  has_many :assignments
  has_many :projects, :through => :assignments

  validates :name, :presence => true
  validates_with MyCustomValidator
end

What i really want to do is prevent each model from invalidating the other so to say prevent

my_user.projects << fourth_project

and

my_project.users << user_with_four_projects_already

from happening. Right now it allows the assignment and just the user becomes invalid.


class Project < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignments

  validates :name, :presence => true
  validates_associated :users
end

According to the docs, users must already be assigned to Projects in order to be validated. So:

my_user.projects << fourth_project

would occur, then projects would validate the user and see that it is indeed invalid, making the project invalid as well as in the inverse example.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜