Jon Smock
Jon Smock

Reputation: 9641

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?

Upvotes: 10

Views: 4080

Answers (1)

Koraktor
Koraktor

Reputation: 42893

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.

Upvotes: 10

Related Questions