2011-05-20 67 views
1

我有点卡住了活动记录查询问题。我想在查询中执行左连接而不是内连接,但joins方法的结果仅返回内连接。Rails 3:内部连接与协会

Entry. 
    joins(:measurements => :measurement_type). 
    sum(:value, :conditions => ['name = ?','Calories']) 

棘手的部分是:measurements具有belongs_to的关系:measurement_type它是其中名称列驻留。

此时此功能仅返回用于使用food_posts的用户的金额。目标是为所有用户返回总和。没有食物职位的用户将有零和。

我试过谷歌搜索和搜索这里的其他帖子,但还没有找到答案。有什么建议么?

另外我在我的开发环境和Postgresql中使用SQLite进行生产。

回答

4

如果你想要做一个左连接,而不是一个内部连接,你需要使用自定义的“SQL片段”

在你的榜样,

relation.joins("left join measurements on measurements.id = measurement_type.measurements_id") 

或者类似的规定取决于你的设置。

这个tutorial总结得很清楚。

+0

谢谢!它看起来像我做了一个比你的例子更长的查询额外的关联,这是我坚持。它可以更简洁,但这里是我最后的结果:'relation.joins(“LEFT JOIN测量ON measurements.entry_id = entries.id”)。joins(“INNER JOIN measurement_types ON measurement_types.id = measurements.measurement_type_id” )' – Chanpory 2011-05-20 17:58:11

+0

我很怀疑。我的原始帖子中的数据库架构不是100%清晰的。附:如果问题解决了您的问题,请不要忘记接受:) – diedthreetimes 2011-05-20 18:09:59

1

MetaWhere创业板的外连接的支持,除其他很多善良:

https://github.com/ernie/meta_where

+1

对于Rails 3.1及更高版本,替换为[Squeel](https://github.com/ernie/squeel)。瑞安贝茨有一个关于它的Railscast(http://railscasts.com/episodes/354-squeel)。 – 2013-03-19 12:21:56