Переопределить поиск ActiveRecord - PullRequest
1 голос
/ 30 декабря 2010

Я сделал это в Rails 2.3.10 и 3.0.3, и он работает

def self.find(*args)
  records = super  
  # Manipulate Records here.
end

Я ищу базовую функцию поиска в Rails 3, которую я могу заменить для этой функции, которая будет применена кPost.all, Post.first, Post.last и т. Д.

Ответы [ 4 ]

4 голосов
/ 30 декабря 2010

Мой совет ... вместо этого создайте область или метод класса:

, например

scope :my_scope, lambda {|...| ...}

затем применить

TheClass.my_scope.all
TheClass.my_scope.first
TheClass.my_scope.last
1 голос
/ 18 апреля 2011

Это будет делать то, что задал оригинальный вопрос.

def self.find_by_sql(*args)
  records = super

  # Manipulate Records here

  return records
end
1 голос
/ 30 декабря 2010

Я полагаю, вы ищете это:

# File activerecord/lib/active_record/relation/finder_methods.rb, line 95
def find(*args)
  return to_a.find { |*block_args| yield(*block_args) } if block_given?

  options = args.extract_options!

  if options.present?
    apply_finder_options(options).find(*args)
  else
    case args.first
    when :first, :last, :all
      send(args.first)
    else
      find_with_ids(*args)
    end
  end
end
1 голос
/ 30 декабря 2010

all, first и last - это всего лишь оболочки для find, поэтому переопределение find должно повлиять на все это.Посмотрите, как они реализованы в ActiveRecord :: FinderMethods .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...