EDIT: Для того, чтобы отразить, что речь шла о HABTM
Вы бы использовать что-то вроде этого, если вы хотите, чтобы иметь возможность использовать ту же самую точную запись как для работодателя и школы в User.employer
. Я предполагаю, что у пользователя может быть только одна школа и один работодатель, не более того.
class School < ActiveRecord::Base
has_many :employees, as: :employable
has_and_belongs_to_many :students, class_name: "User"
end
class Business < ActiveRecord::Base
has_many :employees, as: :employable
end
class Contract < ActiveRecord::Base #This object models the relationship between User and Employer
belongs_to :employer, as: :employable, polymorphic: true
belongs_to :user
class User < ActiveRecord::Base
has_and_belongs_to_many :schools
has_many :contracts
has_many :employers, through: :contracts
end
это было бы настроить его так, что, если вы звоните User.school
он будет возвращать объект школы, но если вы звоните User.employer
он может пойти либо школы или работодателя в зависимости от точек какого пользователя.
Используется Polymorphic Associations. Пожалуйста, прочитайте о них, поскольку Миграции отличаются для такого рода ассоциаций.
Причина, по которой мы используем объект Contract
, состоит в том, что ассоциация has_and_belongs_to_many
не может быть полиморфной, поэтому мы вручную ее рулон. Если вам не нравится has_and_belongs_to_many
или вам нужна дополнительная гибкость для отношений School
, вы можете использовать промежуточный объект, например, для работодателя, возможно, он называется Tuition
.
Не рельсовый парень, но разве у вас нет модели пользователя с двумя свойствами с обоими школьными моделями? –
Как связаны школа и работодатель? –
@sean В том, как я об этом думаю, они не связаны друг с другом, за исключением того, что один объект может одновременно быть как Школой, так и Работодателем. – neon