2016-06-17 25 views
0

は、私は次の二つのモデルがあります。だから、掻き回すの問題:デフォルトのソート

class Game 
    belongs_to :tournament, inverse_of: :games 

    validates_presence_of :name 
end 

class Tournament 
    has_many :games, dependent: :destroy 

    validates_numericality_of :number 
end 

を、私は彼らのトーナメントの数を示しゲームのリストを持っており、デフォルトではリストを注文するように私はしたいですトーナメントの番号。

@q = Game.search(params[:q]) 
@q.sorts = 'tournaments_number' if q.sorts.blank? 
@q = @q.result(distinct: true).page(params[:page]) 

問題は、それが数でリストを注文されていないです。私のコントローラで

私はこのような何かを持っています。クエリ

@q = Game.search(params[:q]) 
    @q.sorts = 'tournaments_number' if q.sorts.blank? 
    puts @q.result.to_sql # => SELECT * FROM games 
    @q = @q.result(distinct: true).page(params[:page]) 

を見てみましょう。しかし、私はゲームの分野で注文した場合、それは素晴らしい作品:

@q = Game.search(params[:q]) 
    @q.sorts = 'name' if q.sorts.blank? 
    puts @q.result.to_sql # => SELECT * FROM games ORDER BY name 
    @q = @q.result(distinct: true).page(params[:page]) 

あなたは私が間違って何をやっている知っていますか?関連付けられた属性でソートするにはどうしたらいいですか?

EDIT:

私は次の操作を行う場合は、注文が働くことが判明しました:

@q = Game.includes(:tournament).order('tournaments.number').search(params[:q]) 
    puts @q.result.to_sql # => SELECT * FROM games INNER JOIN tournaments ON games.tournament_id = tournaments.id ORDER BY tournaments.number 
    @q = @q.result(distinct: true).page(params[:page]) 

問題は、私はいくつかの条件を追加することができますが、私がする必要がある、ということです私が他の場所でsort_linkを使うと、それがransackと動作するようにしてください。それは動作しません。

@q = Game.search(params[:q]) 
@q.sorts = 'tournaments.number' if q.sorts.blank? 
@q = @q.result(distinct: true).page(params[:page]) 

答えて

0

はどうなりますか?

+0

同じです...うまくいきません –

+0

私は詳細を追加するために投稿を編集しました。見てみましょう。ありがとう –

0

それは@ q.sorts.blank場合であってはならない。あなたがこれを行うとき

<%= sort_link(@q, 'tournaments.number') %>