1

のための未定義のメソッド私はActiveSupport::Concernを使用して、私のRailsアプリで複数のモデルのために使用することができるユーティリティのコールバックを設定しようとしています。私は、私がPostの新しいインスタンスを作成し、post.saveを呼び出すとactivesupportの::懸念コールバック - NilClass

/app/models/post.rb

class Post < ActiveRecord::Base 
    include Concerns::Postable 
end 

:ここ

/app/models/concerns/postable.rb

module Concerns::Postable 
    extend ActiveSupport::Concern 

    included do |base| 
     base.after_save :correct_article_url, if: Proc.new { |post| post.article_url.present? } 
    end 

    def correct_article_url 
     # do something with the url 
    end 
end 

は私Postモデルである:私は、次のPostableモジュールを持っています次のエラーが表示されます。

NoMethodError - undefined method `correct_article_url' for #<Post:0x007fdb58a35b98> 

私がここで間違って何をしているのですか?

+0

これは動作するはずです。どのようなレール/ルビーバージョンを使用していますか? –

+0

Railsは4.2.5 /ルビー2.3 – ACIDSTEALTH

+0

大丈夫レムREは平均時間ではRailsの4.2.5&ルビー2.3.0 とそれを生成します。あなたがRails Consoleでテストしている可能性はありますか?後で 'correct_article_url'を追加した場合、環境をリロードする必要があります –

答えて

0

私は、これは

module Concerns::Postable 
    extend ActiveSupport::Concern 

    included do 
     after_save :correct_article_url, if: Proc.new { |post| post.article_url.present? } 
    end 

    def correct_article_url 
     # do something with the url 
    end 
end 
+0

違いはありません。同じエラー。 – ACIDSTEALTH

0

は、なぜあなたは、名前空間を使用している(また、あなたのメソッド名のスペルを確認してください)それを解決すべきだと思いますか?モジュールとインクルードの両方から名前空間を削除するだけで動作します。

module Postable 
    extend ActiveSupport::Concern 

    included do |base| 
     base.after_save :correct_article_url, if: Proc.new { |post| post.article_url.present? } 
end 

def correct_article_url 
    # do something with the url 
end 
end 
+0

それは効果がありませんでした。 – ACIDSTEALTH

関連する問題