1

を使用して、Rails アプリの複数のモデルに使用できるユーティリティ コールバックを設定しようとしていますActiveSupport::Concern。次のPostableモジュールがあります。

/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モデルです:

/app/models/post.rb

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

の新しいインスタンスを作成してPostを呼び出すとpost.save、次のエラーが発生します。

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

ここで何が間違っていますか?

4

2 に答える 2

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
于 2016-07-26T17:53:31.283 に答える
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
于 2016-07-26T19:15:07.657 に答える