我有两个模型:Building
和BuildingInfo
。我想使用两列townhall_level
和name
来关联这两个表。
理想情况下,它的工作方式如下:Building.first.building_info
例如Building.first.townhall_level => 5
和Building.first.name => cannon
,Building.first.building_info
将访问BuildingInfo.where(townhall_level: 5, name:"cannon"
。
最好的方法是什么?我可以创建连接name
和townhall_level
的第三列吗?我是否也可以使用该列创建belongs_to和has_many关系?
答案 0 :(得分:1)
简单明了:
class Building < ActiveRecord::Base
def building_info
BuildingInfo.find_by(townhall_level: townhall_level, name: name)
end
end
如果找不到任何内容,它将为nil
,即使找到了多个,也只返回第一条记录。我还强烈建议您通过迁移向两列添加索引:
add_index :building_infos, [:townhall_level, :name], name: 'building_infos_level_and_name'
如果您担心表现,哪会加快搜索速度。
答案 1 :(得分:0)
嗯...我不确定这会有效,但你可以做点什么
class Building < ActiveRecord::Base
def self.bulding_info
BuildingInfo.find_by(townhall_level: townhall_level, name: name)
end
end
但我真的建议你在建筑模型中添加一个building_info_id
并有一个
class Building < ActiveRecord::Base
belongs_to :bulding_info
end