覆盖ActiveRecord查找

时间:2010-12-30 06:27:51

标签: ruby-on-rails activerecord

我在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 个答案:

答案 0 :(得分:4)

我的建议......使用范围或类方法来代替:

e.g。

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

然后申请

TheClass.my_scope.all
TheClass.my_scope.first
TheClass.my_scope.last

答案 1 :(得分:1)

allfirstlast都只是find的包装,因此重新定义find会影响所有这些。{1}}看看它们是如何在ActiveRecord::FinderMethods中实现的。

答案 2 :(得分:1)

我相信你正在寻找这个:

# 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

答案 3 :(得分:1)

这将完成原始问题的要求。

def self.find_by_sql(*args)
  records = super

  # Manipulate Records here

  return records
end