2009-09-27 10 views
8

Ich versuche, eine Methode innerhalb einer Migration zu definieren, aber ich bin eine nicht definierte Methode Fehler bekommen:Definieren von Methoden in Rails Migrationen

undefined method 'do_something_specific' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0x4868018> 

Ich möchte lieber nicht an anderer Stelle definieren, weil es doesn t beziehen sich wirklich auf den Rest der Anwendung, nur diese spezifische Migration.

Um klar zu sein, sieht meine Migration so etwas wie:

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

    def do_something_specific(p_1, p_2) 
    # something happens here... 
    end 

end 

Bin ich hier etwas fehlt? Warum kann ich das nicht so definieren?

Antwort

8

Wie Sie der Fehlermeldung entnehmen können, wird der Code nicht innerhalb Ihrer Migrationsklasse, sondern innerhalb des Verbindungsadapters aufgerufen. Ich bin mir nicht sicher, aber diese kleine Änderung sollte funktionieren:

class DoSomethingSpectacular < ActiveRecord::Migration 

    def self.up 
    DoSomethingSpectacular.do_something_specific(1, 2) 
    end 

    def self.down 
    end 

private 

    def self.do_something_specific(p_1, p_2) 
    # something happens here... 
    end 

end 

Beachten Sie, dass ich Ihre Methode statisch gemacht und nannte es in einer statischen Art und Weise. Dies sollte alle Probleme mit dem Klassenumfang überwinden.

+0

Yeah Ich habe nicht verstanden, was es aus dem Adapter aufgerufen wurde, aber ich dachte, es sollte immer noch in seinem Umfang sein. Wie auch immer, jetzt bekomme ich einen Fehler undefinierte Methode 'do_something_specific' für Klasse: Class –

+0

D'oh sorry. Da 'self.up' selbst eine statische Methode ist, gibt der Aufruf von' class' 'Class' und nicht' DoSomethingSpectacular' zurück. Ich habe den Beispielcode aktualisiert. – Koraktor

+2

Ich denke, Sie können das 'DoSomethingSpectacular' sicher entfernen. in selbst.up – khelll

Verwandte Themen