2011-01-09 6 views
0

Ich habe meine Anwendung von Schienen 2.3.8 auf 3.0.3 aktualisiert. Aber ich stehe vor einem Problem. Ich war mit ‚gefunden‘, aber das übergeordnete funktioniert nicht in Schienen 3:Wie überschreiben 'wo' in Schienen 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 

Ich frage mich, ob es einen Weg gibt, diese Arbeit in Schienen 3 oder sogar zu machen, indem Sie wo statt.

dank

Antwort

-1

Das Problem, das Sie stehen, ist ein Upgrade von einer Schiene 2.3.x auf eine Schiene 3.0.X Anwendung. Obwohl es eine einfache Aufgabe zu sein scheint, ist es nicht, vor allem, wenn Sie eine echte Anwendung und kein Spielzeug haben. Ich schlage vor, dass Sie sich eine Screencast-Serie von Rayn Bates anschauen. Sie könnten von http://railscasts.com/episodes/225-upgrading-to-rails-3-part-1 starten, um eine vollständige Vorstellung von dem Problem zu bekommen, dem Sie gegenüberstehen.

Wenn Sie nur über ActiveRecord lesen müssen, ist die neue Schnittstelle http://m.onkey.org/active-record-query-interface ein großartiger Artikel.

+0

Haben Sie jemals von einem Überschreiben gehört? http://en.wikipedia.org/wiki/Method_overriding. Mein Problem besteht nicht im Upgrade. Ich habe es bereits bestanden. Mein Problem ist, als ich User.find ('irgendein Name') anrief. es nennt die übergeordnete Methode, die ich in Schienen 2 gemacht habe. aber in Schienen 3 gibt mir ein Fehler sagt: "Konnte nicht Benutzer mit ID = 'irgendein Name'" finden. weil es die übergeordnete Methode nicht sieht – Zakwan

+0

http://www.freezzo.com/2008/05/14/override-default-find-conditions-for-model/ – Zakwan

+0

Ja, ich weiß, welche Methode überschreiben ist. Ich habe nur angedeutet, dass es keine gute Lösung ist, um es hier zu verwenden. Ich kann nicht über einen guten Fall nachdenken, bei dem Sie wirklich die Methodenüberschreibung für die Suchmethode von ActiveRecord verwenden – lucapette