0

如果使用 SQL 完成,我发现此查询更容易

select Topics.subject, shortcode, (select count(*) from votes where Votes.Topic_Id = Topics.Id ) as votes from Topics
where url like 'http://test.com%'
ORDER BY votes desc;

使用 ActiveRecord,我认为应该有一个更优雅的......或者至少可能的方式来做到这一点。有什么建议么?

我从这个开始,它有效,但没有进入下一步,而是使用:

t = Topic.find(:all, :conditions => "url like 'http://test.com%'")
4

1 回答 1

1

要获得带票的主题:

Topic.where('url like :url', :url => 'http://test.com%').
      joins(:votes).
      select('topics.*, count(votes.id) as votes')

请注意,这仅适用于 MySql。对于 PostgreSQL,您需要指定 group 子句:

Topic.where('url like :url', :url => 'http://test.com%').
      joins(:votes).
      group(Topic.column_names.map{|col| "topics.#{col}"}).
      select('topics.*, count(votes.id) as votes')
于 2012-12-25T03:49:25.987 回答