Rails连接sql列并创建一对多关系

时间:2015-07-23 07:14:54

标签: sql ruby-on-rails

我有两个模型:BuildingBuildingInfo。我想使用两列townhall_levelname来关联这两个表。

理想情况下,它的工作方式如下:Building.first.building_info例如Building.first.townhall_level => 5Building.first.name => cannonBuilding.first.building_info将访问BuildingInfo.where(townhall_level: 5, name:"cannon"

最好的方法是什么?我可以创建连接nametownhall_level的第三列吗?我是否也可以使用该列创建belongs_to和has_many关系?

2 个答案:

答案 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