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_id
和 property_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
我有两个模型: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_id
和 property_id
.
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=