显示Rails中多个表的数据

时间:2011-04-20 18:14:17

标签: ruby-on-rails view

我有多个与主键 - 外键关系相关的表。另外,我在这些表格之上有相互独立的模型。现在,我需要一个显示多个表中数据的视图。我该怎么做?我应该创建一个包含每个表的属性的虚拟模型吗?如果是这样,我如何以及在何处对这些多个表执行查询。任何代码片段都会有很大的帮助。

更清楚,这是一个例子。假设这些是下表。

表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

我该怎么做?

由于

2 个答案:

答案 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,依此类推。