Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Defining methods in Rails migrations

I'm trying to define a method inside a migration, but I'm getting an undefined method error:

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

I'd rather not define it elsewhere, because it doesn't really relate to the rest of the application, just this specific migration.

To be clear, my migration looks something like:

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

Am I missing something here? Why can't I define this like this?

like image 728
Jon Smock Avatar asked Sep 27 '09 19:09

Jon Smock


1 Answers

As you may see from the error message the code isn't called from within your migration class but inside the connection adapter. I'm not sure, but this small change should work:

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

Note that I made your method static and called it in a static way. This should overcome any class scope issues.

like image 61
Koraktor Avatar answered Sep 20 '22 06:09

Koraktor