在after_save中调用类方法

时间:2012-07-10 12:34:42

标签: ruby-on-rails

这可能是一个愚蠢的观点,但我找不到解决方案。

我有一个带有类方法update_menu的简单模型,我希望在每次保存实例后调用它。

Class Category
  attr_accessible :name, :content


  def self.menu
     @@menu ||= update_menu
  end

  def self.update_menu
     @@menu = Category.all
  end
end

那么获得after_filter电话update_menu的正确语法是什么?

我试过了:

after_save :update_menu

但是它会查找实例上的方法(不存在)而不是类。

感谢您的回答。

3 个答案:

答案 0 :(得分:6)

删除self使其成为实例方法。

# now an instance method
def update_menu
   @@menu = Category.all
end

对类方法进行after_save回调没有多大意义。不保存类,实例是。例如:

# I'm assuming the code you typed in has typos since
# it should inherit from ActiveRecord::Base
class Category < ActiveRecord::Base
  attr_accessible :name
end

category_one = Category.new(:name => 'category one')
category_one.save  # saving an instance

Category.save # this wont work

答案 1 :(得分:6)

after_save :update_menu

def updated_menu
  self.class.update_menu
end

这将调用类update_menu方法

答案 2 :(得分:3)

after_save 'self.class.update_menu'

Rails会将符号计算为实例方法。为了调用类方法,您必须传递一个字符串,该字符串将在正确的上下文中进行评估。