Das Überschreiben des Konstruktors ist wahrscheinlich eine schlechte Idee (wie Sie gefunden haben). Sie sollten ein before_filter
verwenden:
class ProductsController < ApplicationController
before_filter :set_defaults
...
private
def set_defaults
@sort_by = :shop_brand
end
end
aber es klingt wie Sie Zustand halten wollen. Am einfachsten ist es in der Sitzung des Benutzers zu speichern, die automatisch pro Benutzer bestehen bleiben wird, bis sie den Browser zu schließen:
def set_defaults
session[:sort_by] ||= :shop_brand
end
Die andere Option wäre die aktuelle sort_by Wert in der URL zu übergeben. Dies ist jedoch schwieriger zu implementieren, da Sie sicherstellen müssen, dass jeder Link oder jedes Formular den Wert für die nächste Anforderung kopiert. Der Vorteil davon ist jedoch, dass der Benutzer mehrere Registerkarten mit verschiedenen Ordnungen geöffnet haben könnte und jeder Lesezeichen-Link die gleiche Reihenfolge beim nächsten Mal wiederherstellen würde. Dies ist der Ansatz, den Dinge wie Suchmaschinen verwenden würden.
Und wenn 'sort_by' sich nie ändern wird, funktioniert es wahrscheinlich besser als eine Konstante' SortBy' an der Basis der Klasse :) – Matchu
'sort_by' kann geändert werden, also kann es keine Konstante sein. Außerdem wird in Ihrem Code '@ sort_by' vor jeder Aktion gesetzt, aber ich möchte den Standardwert (': shop_brand') nur einmal setzen! Ich möchte nicht den Standardwert jedes Mal, wenn die 'index' Methode aufgerufen wird, setzen! –
Nun, ich kann '@sort_by || =: shop_brand' machen, aber ich frage mich, ob es eine schönere Methode gibt, die 'set_defaults' nicht jedes Mal aufruft? –