2016-06-17 11 views
0

Ich habe die nächsten zwei Modelle:Ransack Ausgabe: Standardsortierung

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 

Also, ich habe eine Liste der Spiele, die ihre Turnier-Nummer zeigt, und ich möchte als ein Standard die Liste nach der Bestellung Turniernummer.

In meinem Controller habe ich so etwas wie diese:

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

Das Problem ist nicht die Liste der Nummer der Bestellung. Werfen Sie einen Blick auf die Abfrage

@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]) 

Aber wenn ich durch ein Feld von Spielen zu bestellen, es funktioniert super:

@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]) 

Wissen Sie, was mache ich falsch? Wie kann ich nach dem zugehörigen Attribut sortieren?

EDIT:

Ich habe herausgefunden, dass, wenn ich die nächste zu tun, ist die Reihenfolge funktioniert:

@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]) 

Das Problem ist, dass, obwohl ich etwas bedingten hinzufügen kann, muß ich Mach es mit Ransack arbeiten, da ich einen sort_link an anderer Stelle verwende, und es funktioniert nicht.

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

Antwort

0

Was passiert, wenn Sie dies tun:

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

Es ist das gleiche ... Funktioniert nicht –

+0

Ich habe den Beitrag bearbeitet, um weitere Informationen hinzuzufügen. Schau mal. Vielen Dank –

0

sollte es nicht sein, wenn @ q.sorts.blank?

Verwandte Themen