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