Ruby类声明问题

nev*_*ame 0 ruby

我不能这样做:

class Hardware

before_filter

  def before_filter
    puts "ge"
  end

end
Run Code Online (Sandbox Code Playgroud)

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

hd = Hardware.new
Run Code Online (Sandbox Code Playgroud)

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

Jör*_*tag 7

您的代码存在两个问题:

  1. 您正在调用方法,但您正在定义实例方法.
  2. 您在定义之前调用该方法.

这两个显然都无法奏效.

这可行:

class Hardware
  def self.before_filter
    puts "ge"
  end

  before_filter
end
Run Code Online (Sandbox Code Playgroud)


rfu*_*duk 5

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

您可能只是在寻找:

class Hardware
  def initialize
    super
    before_filter
  end

  protected
  def before_filter
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)