Sie haben hier zwei Möglichkeiten, abhängig davon, wie stark Ihre Logik und Ihre Ansicht an den Bereich gebunden ist. Lassen Sie mich weiter erklären.
Die erste Wahl besteht darin, den Umfang innerhalb Ihres Controllers zu bestimmen, wie bereits in den anderen Antworten erläutert. Normalerweise setze ich eine Variable @ Scope, um einige zusätzliche Vorteile in meinen Vorlagen zu erhalten.
Der Grund für die @ Scope-Variable ist, dass Sie möglicherweise den Umfang Ihrer Anfrage außerhalb der einzelnen Aktion kennen müssen. Angenommen, Sie möchten die Anzahl der Datensätze in Ihrer Ansicht anzeigen. Sie müssen wissen, ob Sie nach Kategorie filtern oder nicht. In diesem Fall müssen Sie einfach @scope.count
oder @scope.my_named_scope.count
aufrufen, anstatt jedes Mal die Überprüfung auf params[:category_id]
zu wiederholen.
Dieser Ansatz funktioniert gut, wenn Ihre Ansichten, die mit Kategorie und die ohne Kategorie, sehr ähnlich sind. Aber was passiert, wenn der nach Kategorien gefilterte Eintrag völlig anders ist als der ohne Kategorie? Das passiert ziemlich oft: Ihr Kategorienbereich bietet einige kategorienorientierte Widgets, während Ihr Artikel einige Artikel-bezogene Widgets und Filter enthält. Außerdem verfügt Ihr Artikelcontroller über einige spezielle before_filters, die Sie möglicherweise verwenden möchten. Sie müssen diese Artikel jedoch nicht verwenden, wenn die Artikelliste zu einer Kategorie gehört.
In diesem Fall möchten Sie möglicherweise die Aktionen trennen.
map.resources articles
map.resources categories, :collection => { :articles => :get }
articles_path # /articles and ArticlesController#index
category_articles_path(1) # /category/1/articles and CategoriesController#articles
Nun ist die Liste nach Kategorien gefiltert wird durch die CategoriesController
verwaltet und es erbt alle Controller Filter, Layouts, Einstellungen ... während die ungefilterte Auflistung der ArticlesController
verwaltet wird.
Dies ist normalerweise meine Lieblingswahl, weil Sie mit einer zusätzlichen Aktion Ihre Ansichten und Controller nicht mit einer Unzahl von bedingten Prüfungen überladen müssen.
Dies ist genau das andere Problem, mit dem ich konfrontiert war, ich musste auch verschiedene Ansichten wiedergeben. – knoopx
auch, tut: flach macht Sinn auf dieser bestimmten Route? – knoopx
Wenn du nicht: seicht verwendest, brauchst du eine Möglichkeit, die/articles-Route zu mappen, ja, IMHO macht es Sinn. –