在Rails迁移中定义方法

时间:2009-09-27 19:52:24

标签: ruby-on-rails migration

我正在尝试在迁移中定义一个方法,但是我得到一个未定义的方法错误:

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

我宁愿不在其他地方定义它,因为它与应用程序的其余部分没有关系,只是这个特定的迁移。

要清楚,我的迁移看起来像:

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

我在这里遗漏了什么吗?为什么我不能这样定义?

1 个答案:

答案 0 :(得分:9)

从错误消息中可以看出,代码不是从迁移类中调用,而是在连接适配器内调用。我不确定,但这个小改变应该有效:

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

请注意,我将您的方法设为静态并以静态方式调用它。这应该克服任何阶级范围问题。