我有多个与主键 - 外键关系相关的表。另外,我在这些表格之上有相互独立的模型。现在,我需要一个显示多个表中数据的视图。我该怎么做?我应该创建一个包含每个表的属性的虚拟模型吗?如果是这样,我如何以及在何处对这些多个表执行查询。任何代码片段都会有很大的帮助。
更清楚,这是一个例子。假设这些是下表。
表1:pk,attr1,attr2,attr3,attr4,attr_fk_table2,attr_fk_table3,attr_fk_table4
表2:pk,attr1,attr2,attr3,attr4,attr5
表3:pk,attr1,attr2,attr3
表4:pk,attr1,attr2,attr3
表1,2,3,4的模型也是独立的。我的意思是说模型级别之间没有has_one或belongs_to关系。
现在我需要一个具有以下属性的视图
表1:attr1,表1:attr2,表2:attr5,表3:attr3,表4:attr2
我该怎么做?
由于
答案 0 :(得分:1)
使用find_by_sql:
sql = %{
select
t1.attr1, t1.attr2, t2.attr5, t3.attr3, t4.attr2
from
Table1 t1, Table2 t2, Table3 t3, Table4 t4
where
t1.attr_fk_table2 = t2.pk
and t1.attr_fk_table3 = t3.pk
and t1.attr_fk_table4 = t4.pk
}
result = find_by_sql(sql)
答案 1 :(得分:0)
听起来你需要做的就是编写一个将数据聚合到正确结构中的查询,然后简单地获取它:
ActiveRecord::Base.connection.select_rows("
SELECT table1.attr1, table1.attr2, table2.attr5, table3.attr3, table4.attr2
FROM table1
LEFT JOIN table2 ON table1.attr_fk_table2=table2.pk
LEFT JOIN table3 ON table1.attr_fk_table3=table3.pk
LEFT JOIN table4 ON table1.attr_fk_table4=table4.pk
").each do |row|
# ...
end
您将获取数据作为一系列行,其中项目0为table1.attr
,依此类推。