Итак, в основном вы хотите проверить, что человек принимает проекты только из одного домена. Я полагаю, этот домен должен быть определен, то есть у человека должен быть столбец domain_id
.
У вас также есть связь «многие ко многим», и, поскольку для этой ассоциации требуются некоторые проверки, у вас должна быть также модель соединения (вместо таблицы без модели). Я назвал это Work
. Итак, у меня есть это:
class Domain < ActiveRecord::Base
has_many :projects
end
class Project < ActiveRecord::Base
belongs_to :domain
has_many :works
has_many :persons, :through => :works
end
class Work < ActiveRecord::Base
belongs_to :project
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :works
has_many :projects, :through => :works
end
Теперь, к Work
модели вы просто добавляете
validate :projects_belong_to_apropriate_domains
def projects_belong_to_apropriate_domains
if person.domain_id != project.domain.id
errors[:base] << "A person may only take a project which belongs to his domain."
end
end
Это сработало для меня. Это то, что вы хотели?