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 に答える