Ich habe zwei Modelle in einer Beziehung has_many, so dass Log has_many Elemente. Rails richtet dann schön Dinge wie: some_log.items
, die alle zugehörigen Elemente zu some_log zurückgibt. Wenn ich diese Elemente basierend auf einem anderes Feld in dem Item Modell bestellen wollte, ist es eine Möglichkeit, dies durch ein ähnliches Konstrukt zu tun, oder man in etwas zu brechen hat wie:Rails Bestellung von in verbundenen Modell
Item.find_by_log_id(:all,some_log.id => "some_col DESC")
Da Rails 3.x, die benannte_Scope-Syntax ist etwas anders. Es wird jetzt mit "scope" anstelle von "named_scope" aufgerufen und verwendet Funktionen, um die Scope-Struktur zu definieren. Zum Beispiel: "scope: ordered, order (" some_col DESC ")". –
In Rails 4 gibt es wieder einen anderen Ansatz. Der Standard-Assoziationsbereich sollte als ein lambda wie 'has_many: items, -> {order (: irgendein_col) .where (foo: 'bar')}' angegeben werden und in ähnlicher Weise nehmen die benannten Bereiche jetzt einen lambda 'scope: name_of_scope, -> {wo (foo: 'bar')} '. Der Standardbereich benötigt einen Block: 'default_scope: {wo (foo: 'bar')}' – Leo
Hervorragende Antwort. +1 – sscirrus