Почему MyModel.all работает в Rails? - PullRequest
2 голосов
/ 24 мая 2010

Я не понимаю эту маленькую вещь:

Предположим, у нас есть модель "Состояние"

class Condition < ActiveRecord::Base
end

Почему Condition.all работает?

Condition.all.each { |p| do_something }

Этот синтаксис говорит нам, что у нас есть объект класса «Condition», где-то инстанцированный?

Или это какое-то соглашение в случае конфигурации?

Я спрашиваю об этом, потому что я хочу переопределить метод Condition.all, чтобы он возвращал условия, отсортированные по значению поля созданного поля *

Мне не нужно использовать метод сортировки на месте, я хочу вставить условия, потому что во всем проекте мне нужна только одна сортировка

Спасибо

1 Ответ

7 голосов
/ 24 мая 2010

Person.all это просто псевдоним для Person.find(:all) (см. Документацию здесь ).

all, как и find, является методом класса в ActiveRecord::Base, поэтому для вызова не требуется экземпляр.

Обновление

Чтобы переопределить метод класса, вам нужно запомнить префикс self.. например Вы можете переопределить all так:

class Condition < ActiveRecord::Base
  def self.all(*args)
    # overridden implementation here
  end
end

Если вы не понимаете методы экземпляра и методы класса, прочитайте этот пост , который является хорошим резюме,

Однако, если вы просто хотите указать порядок по умолчанию, вам не нужно делать это . Вы можете просто использовать default_scope :

class Condition < ActiveRecord::Base
  default_scope :order => 'created_at'
end
...