2011-01-25 4 views
4

この種のクエリを実行するためのRails 3の連鎖方法は何ですか?rails 3のクエリでcount()とgroup()を使用するか、単にsql?

@jobs_by_location = 
    Employer.find_by_sql ['SELECT count(j.id) AS job_count, e.* FROM employers e, jobs j' + 
         ' WHERE e.parent_id = ? AND j.employer_id = e.id' + 
         ' AND j.status = 2' + 
         ' GROUP BY e.id' + 
         ' ORDER BY e.state_id, e.city, e.name ASC', @employer.id] 

私が思い付いた:

@jobs_by_location = Employer 
    .select('employers.*, count(jobs.id) as job_count').joins(:jobs) 
    .group('employers.id').order('employers.state_id,employers.city,employers.name ASC') 
    .where(:jobs => {:status => 2}).where(@employer.id) 

私ももっとこれを引き締めることができますか? order()コールをクリーンアップできますか?count()をどこかで使用する必要がありますか?私は気にする必要がありますか?ありがとう。

答えて

2

order句では、カラム名があいまいでない限り、テーブルを指定する必要はありません。あなたはおそらくちょうど

.order('state_id, city, name ASC') 

はまた、私はあなたが私はあなたの事は大丈夫だと思いますそれ以外

.where(:parent_id => @employer.id) # instead of .where(@employer.id) 

を置くためのものだと思いますすることができます。私はカウントがこのケースであなたを助けるとは思わない。

関連する問題