Ruby类声明问题

时间:2010-07-15 12:12:09

标签: ruby

我不能这样做:

class Hardware

before_filter

  def before_filter
    puts "ge"
  end

end

当我实例化它时,before_filter是未定义的方法或变量

hd = Hardware.new

因为我见过其他人之前在一个类中放了一个方法名。只是想知道它是如何工作的。感谢

3 个答案:

答案 0 :(得分:7)

您的代码存在两个问题:

  1. 您正在调用方法,但您正在定义实例方法。
  2. 您在之前调用方法
  3. 这两个显然都行不通。

    这样可行:

    class Hardware
      def self.before_filter
        puts "ge"
      end
    
      before_filter
    end
    

答案 1 :(得分:5)

before_filter是一个ActiveRecord类方法(请参阅here),因此只有在模型继承自ActiveRecord::Base(或子类)时才可用。你能更具体地了解你想要做什么吗?

您可能只是在寻找:

class Hardware
  def initialize
    super
    before_filter
  end

  protected
  def before_filter
    # ...
  end
end

答案 2 :(得分:3)

要么改变

def before_filter

def self.before_filter

并在定义

之后调用它

OR

评论before_filter

class Hardware
  def before_filter
    puts "ge"
  end
end

并像

一样打电话
hd = Hardware.new
hd.before_filter