我有两张桌子
1.具有4个属性的“SharedInfo”:id,info_name,description,type_id
2.“Type”具有3个属性:id,type_name,code
关系是:“SharedInfo”belongs_to“Type”,“Type”has_many“SharedInfo”。外键是:type_id。
我想要jion 2表并选择info_name,description,type_id,type_name,code
如何在RoR应用程序(Controller)中执行此操作
我更具体地编辑了我的问题:
在控制器中我想要检索具有表“SharedInfo”的所有属性的实例@instance和基于“type_id”属性的表“Type”的属性“code”。 (@instance有'id','info_name','description','type_id','code'属性)
答案 0 :(得分:0)
你可以使用.joins()
试试这个假设id = 1
例如:
select("si.info_name, si.description, si.type_id, t.type_name, t.code")
.from("SharedInfo AS si ON t.type_id = si.type_id")
.joins("Type AS t ON si.type_id = t.type_id")
.where("si.id = 1")
答案 1 :(得分:0)
因此,您可以使用Active Record Associations
执行此操作。
SharedInfo has_many Type
和Type belongs_to SharedInfo
。使用它,您可以在两个表上进行连接查询。
至于您将其转换为json并在视图中显示的后续部分,您可以将Active Record对象渲染为json并使用它。
详细了解Active Record Associations here。您也可以参考此SO answer作为示例。
希望这有帮助
答案 2 :(得分:0)
没关系,我解决了我的问题: 通过使用:
@locations = SharedInfo.select("shared_infos.info_name, shared_infos.description, shared_infos.type_id, types.type_name, types.code").joins("LEFT OUTER JOIN types ON types.id = shared_infos.type_id")
希望帮助那些像我一样有问题的人 感谢大家的帮助。