ActiveRecord通过使用find_by_sql连接从2个表中获取数据

时间:2015-03-17 05:29:16

标签: ruby-on-rails ruby rails-activerecord

我知道有一些方法可以加入/包含表格,但在这里我想通过使用ActiveRecord.find_by_sql从2个表中检索数据。

实施例) 有2个表。

Table1: User{
id: Integer
name: String
}
Table2: UserComment{
id: Integer
user_id: Integer
comment: String
}

现在我想要ActiveRecord检索的是

select u.name, count(uc.comment) from User u, UserComment uc where u.id = uc.user_id group by u.name

我们如何用ActiveRecode写这个?以下只返回u.name :(

User.find_by_sql(<<-SQL)
select u.name, count(uc.comment) from User u, UserComment uc where u.id = uc.user_id group by u.name
SQL

一种可能的方法是使用Base.connection.execute直接运行SQL?嗯,但它看起来并不酷。

sql = 'select u.name, count(uc.comment) from User u, UserComment uc where u.id = uc.user_id group by u.name' ActiveRecord::Base.connection.execute(sql) 

1 个答案:

答案 0 :(得分:2)

如果您的has_many :user_comments模型中定义了User关联,这应该有效:

User.joins(:user_comments).group(:name).count