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') %>
Es ist das gleiche ... Funktioniert nicht –
Ich habe den Beitrag bearbeitet, um weitere Informationen hinzuzufügen. Schau mal. Vielen Dank –