这可能是一个愚蠢的观点,但我找不到解决方案。
我有一个带有类方法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
但是它会查找实例上的方法(不存在)而不是类。
感谢您的回答。
答案 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会将符号计算为实例方法。为了调用类方法,您必须传递一个字符串,该字符串将在正确的上下文中进行评估。