我正在尝试在迁移中定义一个方法,但是我得到一个未定义的方法错误:
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
我在这里遗漏了什么吗?为什么我不能这样定义?
答案 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
请注意,我将您的方法设为静态并以静态方式调用它。这应该克服任何阶级范围问题。