Rails HABTM 还是 has_many?

Rails HABTM or has_many?

我有两个模型:Person 和 属性。在 Person 模型中,我有一个存储人员角色(租户、所有者、管理员、承包商等)的字段。由于每个 属性 都将属于一个所有者并且可能有一个或多个租户,我认为这将是一个使用 HABTM 模型关系的好机会。

我做对了吗?

另外,如何引用附件模型?假设我的连接模型名为 PropertiesPeople,并且我想获取特定 属性 的租户,那会是以下吗?

@property.people.where(:role => "tenant")

如果同一个人可以有多个属性,你应该可以使用HABTM。像这样:

class Person < ActiveRecord::Base
  # in the people table you are storing the 'role' value
  has_and_belongs_to_many :properties, join_table: 'people_properties'
end

class Property < ActiveRecord::Base
  has_and_belongs_to_many :people, join_table: 'people_properties'
end

您应该使用外键 person_idproperty_id.

创建中间 table people_properties

这种方法的问题是,如果一个人可以 "tenant" 在一个 属性 和 "contractor" 在另一个,例如,你不能存储该信息。在那种情况下,我会建议使用中间模型,像这样

class Person < ActiveRecord::Base
    has_many :property_people
    has_many :properties, through: :property_people
end

class PropertyPerson
    # now you store here the 'role' value
    belongs_to :person
    belongs_to :property
end

class Property < ActiveRecord::Base
    has_many :property_people
    has_many :people, through: :property_people
end

我不确定 class 名称是否从关系名称中成功推断出来,在这种情况下,您始终可以指明 class_name 甚至 foreign_key协会。您还可以使用 self.table_name=

指示模型的 table