Вопрос объявления класса Ruby - PullRequest
0 голосов
/ 15 июля 2010

Разве я не могу сделать это так:

class Hardware

before_filter

  def before_filter
    puts "ge"
  end

end

Он говорит, что before_filter - неопределенный метод или переменная, когда я его создаю

hd = Hardware.new

потому что я видел, как другие помещали имя метода в класс раньше. Просто интересно, как это работает. Спасибо

Ответы [ 3 ]

7 голосов
/ 15 июля 2010

С вашим кодом есть две проблемы:

  1. Вы вызываете метод class , но вы определяете метод instance .
  2. Вы вызываете метод до того, как он был определен.

Очевидно, что оба они не могут работать.

Это будет работать:

class Hardware
  def self.before_filter
    puts "ge"
  end

  before_filter
end
5 голосов
/ 15 июля 2010

before_filter - это метод класса ActiveRecord (см. здесь ), поэтому он будет доступен только в том случае, если ваша модель унаследована от ActiveRecord::Base (или подкласса).Можете ли вы более конкретно рассказать о том, что вы пытаетесь сделать?

Возможно, вы просто ищете:

class Hardware
  def initialize
    super
    before_filter
  end

  protected
  def before_filter
    # ...
  end
end
3 голосов
/ 15 июля 2010

Любое изменение

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...