Я создал несколько приложений с похожими требованиями.Я считаю, что лучшее решение, которое будет соответствовать вашим требованиям, это has_many :through
.
class Person < ActiveRecord
has_many :assignments
has_many :roles, :through => :assignments
end
class Assignment < ActiveRecord
belongs_to :person
belongs_to :role
end
class Role < ActiveRecord
has_many :assignments
has_many :people, :through => :assignments
validates :name, :presence => true
delegates :profile, :to => :assignment
end
База данных:
people
|-- first_name, :string
|-- last_name, :string
assignments
|-- person_id, :integer
|-- role_id, :integer
|-- profile, :text
roles
|-- name, :string