2009-09-27 13 views
8

Estoy tratando de definir un método dentro de una migración, pero estoy recibiendo un error indefinido método:métodos de definición de las migraciones Rieles

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

prefiero no lo definen en otro lugar, ya que doesn' realmente se relaciona con el resto de la aplicación, solo esta migración específica.

Para que quede claro, mi migración se ve algo como:

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 

Me estoy perdiendo algo aquí? ¿Por qué no puedo definir esto así?

Respuesta

8

Como puede ver en el mensaje de error, no se llama al código desde su clase de migración sino dentro del adaptador de conexión. No estoy seguro, pero este pequeño cambio debería funcionar:

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 

Nota que hice el método estático y lo llamó de una manera estática. Esto debería superar cualquier problema de alcance de clase.

+0

Sí No entendí lo que estaba llamando desde el adaptador, pero pensé que aún debería estar dentro de su alcance. De todos modos, ahora obtengo un error de método indefinido 'do_something_specific' para Class: Class –

+0

D'oh lo siento. Como 'self.up' es un método estático en sí mismo, la llamada a' class' devolverá 'Class' y no' DoSomethingSpectacular'. Actualicé el código de muestra. – Koraktor

+2

Creo que puede eliminar de forma segura el 'DoSomethingSpectacular'. en self.up – khelll

Cuestiones relacionadas