2011-01-09 38 views
0

我已经将我的应用程序从rails 2.3.8升级到3.0.3。但是我面临一个问题。我用的是“发现”,但压倒一切的不导轨3工作:如何覆盖'where'in rails 3

# override activerecord's find to allow us to find by name or id transparently 
    def self.find(*args) 
    if args.is_a?(Array) and args.first.is_a?(String) and (args.first.index(/[a-zA-Z\-_]+/) or args.first.to_i.eql?(0)) 
     find_by_login_slug(args) 
    else 
     super 
    end 
    end 

我不知道是否有一种方法,使在轨道3,甚至通过使用其中代替这项工作。

感谢

回答

-1

你所面临的问题是从轨道2.3.x版本的轨道3.0.x的应用程序的升级。尽管这看起来不是一件简单的事情,特别是如果你有真正的应用程序而不是玩具之一。我建议你看一看Rayn Bates的截屏视频,你可以从http://railscasts.com/episodes/225-upgrading-to-rails-3-part-1开始,了解你面临的问题。

如果您只需要阅读有关ActiveRecord新界面http://m.onkey.org/active-record-query-interface是一篇很棒的文章。

+0

你有没有听说过重写? http://en.wikipedia.org/wiki/Method_overriding。我的问题不在于升级。我已经通过了它。我的问题是当我打电话User.find('任何名字')。它调用了我在rails 2中创建的重写方法,但在rails 3中给我一个错误说:“找不到ID ='任何名称的用户'”。因为它没有看到压倒一切的方法 – Zakwan 2011-01-09 12:25:58