rails3 с незаданной областью внутри модели переопределяется по умолчанию - PullRequest
2 голосов
/ 01 февраля 2011

У меня есть эта модель

User.rb

default_scope :order => 'users.created_at DESC'

и

scope :ranking, lambda { unscoped { order('users.ranking DESC') }}

, и все же я получаю to_sql, который включает ORDER BY users.created_at DESC, users.ranking DESC ...

Может кто-нибудь объяснить, почему?

Я действительно не хочу звонить с незаданной областью с каждого контроллера, в котором я буду использовать эту модель.

Спасибо!

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Как вы обнаруживаете, default_scope часто доставляет больше хлопот, чем стоит.Если вы хотите придерживаться этого, вы можете использовать reorder, чтобы игнорировать предыдущий порядок:

scope :ranking, reorder("ranking DESC")
0 голосов
/ 27 апреля 2011

Не знаю, почему @TimPost удалил мой ответ, но я использую rails 3.0.5 и ruby ​​1.9.2 для проекта, и когда я использовал reorder (который работает, кстати), это говорит об этом в журнале

ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ: переупорядочение устарело.Пожалуйста, используйте вместо (: order) .order (...).(звонил с <class:Item>

Так что я не думаю, что это справедливо, мой ответ был удален, и я получил штраф за дерьмовый ответ

...