2016-03-22 33 views
3

私は、プロジェクトとその成果物がマッチで結ばれています。助成金には有効期限があります。私はプロジェクトのマッチを助成金の有効期限でソートしたい。SQL照会の場所と順序を組み合わせる方法

def self.expires_date_between(from, to) 
    Match.where(:grant_id => Grant.where("expires_at >= ? and expires_at <= ?", from, to)) 
end 

をそして、これは、特定の日付範囲に基づいて一致を示しています

これは私の有効期限に基づいてマッチを取得します。

def current_matches 
    range = user.current_period_range 
    matches.expires_date_between(range[0], range[1]) 
end 

これは、特定の時間に基づいて補助金を表示するために素晴らしい作品が、助成金は、日付(expires_at)の順に表示されていません。グラントは、作成された日付でソートされているようです。補助金が有効期限の順番で表示されるようにクエリを変更するにはどうすればよいですか?

は、私が試した:

def self.expires_date_between(from, to) 
    Match.where(:grant_id => Grant.where("expires_at >= ? and expires_at <= ?", from, to).order('expires_at asc')) 
end 

これはエラーをスローしませんが、それはまた、助成金の順序を変更しません。何か案は?

+0

あなたは '場所(expires_atで使用できる' BETWEEN'演算子を忘れないでください: 〜から) '。 – tadman

+0

チップをありがとう、それは私のコードをはるかにきれいに! – railsie

答えて

3

あなたのモデルでの関連付けを定義したと仮定すると、これは動作するはずです(ただし、テストされていません):

Match 
    .joins(:grant) 
    .merge(Grant.where("expires_at >= ? and expires_at <= ?", from, to)) 
    .order('expires_at asc') 
+0

これは完全に機能しました。 @tadmanの提案を追加し、 'Match.joins(:grant).merge(Grant.where(" expires_at BETWEEN?AND? "、from、to))order( 'expires_at asc')'で終わった。 – railsie

関連する問題