ActiveSupport::Concern Callback - неопределенный метод для NilClass

Я пытаюсь настроить утилиту обратного вызова, которая может использоваться для нескольких моделей в моем приложении 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>

Что я здесь не так делаю?

2 ответа

Я думаю, что это должно решить эту проблему (также проверьте правильность написания имен ваших методов)

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

Почему вы используете пространство имен? просто удалите пространства имен как из модуля, так и из включения, и это будет работать

 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
Другие вопросы по тегам