2017-05-26 10 views
0

私は、before filterがRuby on Railsにあるのと同じ方法で、子クラスで利用できるメソッドを記述したいと思いますし、同様の方法で使うことができます。ここで'before_filter'のスタイルでメソッドを継承する

は私が仕事に期待コードです:

# presenter_test.rb 

module Presenter 
    def presenting(model_name) 
    # do generic stuff 
    end 
end 

class ApplicationPresenter 
    include Presenter 
end 

class ArticlePresenter < ApplicationPresenter 
    presenting :article 
end 

しかしruby presenter_test.rbでそれを実行しているとき、私は次のエラーを取得する:

presenting_test.rb:12:in `<class:ArticlePresenter>': 
    undefined method `presenting' for ArticlePresenter:Class (NoMethodError) 
from presenting_test.rb:11:in `<main>' 
+0

ヒント: 'ArticlePresenter'のクラスは何ですか?ヒント#2:それは 'ApplicationPresenter'ではありません。 –

+1

includeの代わりにextendを使用してください –

答えて

1

あなたはActiveSupport::Concernを使用して、このような何かを行うことができます:

module Presenter 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def presenting(model_name) 
     # do generic stuff 
    end 
    end 
end 

あなたのクラスは期待どおりに動作するはずです。

+0

ありがとうございます。ClassMethodsを使用して、私を解決しました! – Thijs

1

あなたの例として、ポロスを使用する:

module Presenter 
    def presenting(model_name) 
    puts model_name.to_s 
    end 
end 

class ApplicationPresenter 
    extend Presenter 
end 

class ArticlePresenter < ApplicationPresenter 
    presenting :article 
end 
article 
=> nil 

ArticlePresenter.new.presenting('hi') 
hi 
=> nil