这可能是一个愚蠢的观点,但我找不到解决方案.
我有一个带有类方法的简单模型,update_menu我希望在每次保存实例后调用它.
Class Category
attr_accessible :name, :content
def self.menu
@@menu ||= update_menu
end
def self.update_menu
@@menu = Category.all
end
end
Run Code Online (Sandbox Code Playgroud)
那么after_filter接听电话的正确语法是什么update_menu?
我试过了:
after_save :update_menu
Run Code Online (Sandbox Code Playgroud)
但它在实例(不存在)上查找方法而不在类上查找.
谢谢你的回答.
通过删除使其成为实例方法self.
# now an instance method
def update_menu
@@menu = Category.all
end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
after_save :update_menu
def updated_menu
self.class.update_menu
end
Run Code Online (Sandbox Code Playgroud)
这将调用类update_menu方法
after_save 'self.class.update_menu'
Run Code Online (Sandbox Code Playgroud)
Rails 将评估一个符号作为实例方法。为了调用类方法,您必须传递一个字符串,该字符串将在正确的上下文中进行评估。
注意:这仅适用于 Rails 4。请参阅 Rails 5 的 Erez 答案。
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |