代码之家  ›  专栏  ›  技术社区  ›  Jon Smock

定义Rails迁移中的方法

  •  9
  • Jon Smock  · 技术社区  · 15 年前

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

    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 回复  |  直到 15 年前
        1
  •  10
  •   Koraktor    15 年前

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

    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
    

    注意,我使您的方法成为静态的,并以静态方式调用它。这将克服任何类范围问题。