7

それは愚かな点かもしれませんが、私は解決策を見つけられません。

クラスメソッドを持つ単純なモデルがあり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

ただし、クラスではなくインスタンス(存在しない)でメソッドを検索します。

回答ありがとうございます。

4

3 に答える 3

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
于 2012-07-10T12:36:29.663 に答える
6
after_save :update_menu

def updated_menu
  self.class.update_menu
end

これにより、クラスupdate_menuメソッドが呼び出されます

于 2012-07-10T12:43:28.100 に答える
5
after_save 'self.class.update_menu'

Railsはシンボルをインスタンスメソッドとして評価します。クラスメソッドを呼び出すには、正しいコンテキストで評価される文字列を渡す必要があります。

注:これはRails4でのみ機能します。Rails5のErezの回答を参照してください。

于 2012-09-04T05:40:38.893 に答える