Szukanie najwyższej wartości atrybutu zasocjowanego modelu

Witam,
Mam ci ja kilka modeli, z których każdy ma polimorficznie wiele fotosów:

[code]class Place < ActiveRecord::Base
has_many :photos, :as => :item
end

class Article …

class Photo < ActiveRecord::Base
belongs_to :item, :polymorphic => true
end[/code]
Dla danego obiektu, powiedzmy klasy Place, chciałbym znaleźć najwyższą wartość pewnego atrybutu w podłączonych pod niego modelach Place. Wymyśliłem coś takiego:

Place.find(123).photos.first(:order => "nr DESC").nr

Niestety to nie działa. Generowane zapytanie (mysql) wygląda następująco:

SELECT `photos`.* FROM `photos` WHERE `photos`.`item_id` = 123 AND `photos`.`item_type` = 'Place' ORDER BY photos.nr, nr DESC LIMIT 1

Wszystko by było pięknie, gdyby było ORDER BY photos.nr DESC albo ORDER BY photos.nr DESC, nr DESC.

W związku z tym chciałbym spytać czy:

  1. Robię coś źle?
  2. A może coś jest nie tak w gemie mysql?
  3. Ewentualnie czy ktoś ma pomysł, jak rozwiązać mój problem bez konieczności szukania maksymalnej wartości w Rubym?
    Dzięki i pozdrawiam pre-noworocznie :slight_smile:

Robisz nieźle, ale nie masz gdzieś tam default_scope albo innego cichego psuja?

Generalnie :order => “photos.nr DESC” powinno rozwiązać problem.

Ech, dzięki za podpowiedź. Nie było global_scope tylko :order => ‘photos.nr’ przy has_many w jedym z modeli. Skleroza, nieuwaga albo świąteczne wariactwo…

zawsze można w takich momentach wymuszać kolejność metodą reorder (jeżeli jest bardzo istotna do działania zapytania), bo może się okazać że w przyszłości ktoś doda scope w innym miejscu łańcucha zakresów i ziazia.