使用关联表中的少数列和SQL Join

时间:2014-02-04 11:00:55

标签: sql ruby-on-rails database oop

每当我想避免NxN查询时,我在Rails中使用includes。但有时包含的表可能包含大量字段。

为了避免性能问题我做的是,我做了一个连接,我只选择了相关表中的必填字段。

但这根本感觉不对。虽然我不确定是什么,但我觉得自己有所侵犯。

我理解当我们执行includes时,我们无法指定select子句。如何在不进行连接和污染(?)对象的情况下实现这一目标。

1 个答案:

答案 0 :(得分:1)

没有“漂亮”的轨道方式来做到这一点。 就像你说的那样,组合includesselect是不可能也没用的,因为ActiveRecord::Base将每个查询都包装到一个对象中。这意味着仅加载idname并遗漏descriptionuser_id会导致您可能会丢失description的内容将未完成的对象保存到数据库时保存和user_id

因此,您只能使用普通的sql执行此操作,并省略ActiveRecord的对象映射,这样您就不会有丢失数据的危险。您也可以通过ActiveRecord建立的数据库连接执行此操作:

ActiveRecord::Base.connection.execute("SELECT id,name FROM table_name WHERE <conditions>").each do |row|
  row["id"]  #access id of each result
end

ActiveRecord::Base.connection包含使用config/database.yml中提供的环境访问数据建立的连接句柄,因此您可以独立使用相同的数据库连接模型。