具有多个模型的对象(Rails)

时间:2015-05-08 01:12:10

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 model

背景 我在概念上思考如何引用可以属于多个模型的单个对象。例如,如果我有学校和雇主模型 - 理论上用户可以在同一所学校就读和就业。理想情况下,两种关系都指向同一个对象。

问题: 我将如何在基于postgresql的Rails应用程序中对其进行建模?

更新 在这种情况下,我需要一个用户能够拥有一个或多个学校和一个或多个雇主。

2 个答案:

答案 0 :(得分:2)

编辑:反映问题是关于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它会返回一个School对象,但如果你打电话给User.employer,它可以根据用户指向的内容转到学校或雇主。< / p>

这使用了Polymorphic Associations。请阅读它们,因为此类关联的迁移不同。

我们使用Contract对象的原因是has_and_belongs_to_many关联不具有多态性,因此我们手动将其推出。如果您不喜欢has_and_belongs_to_many或需要School关系的更多灵活性,您可以使用像雇主这样的中间对象,可能称为Tuition

答案 1 :(得分:1)

要做到这一点,你将有三个模型,用户,学校和雇主。

用户belongs_to一所学校和belongs_to一位雇主。 学校has_many用户。 雇主has_many用户。

了解直接在模型中使用的这些关系,您现在知道用户将拥有school_idemployer_id属性。学校和雇主都不会有user_id

如果您决定沿着拥有并属于许多学校或雇主(has_and_belongs_to_many)的用户的路线,那么您将需要查看关于连接表的ActiveRecord文档。