Extensão simples do registro ativo
-
27-09-2019 - |
Pergunta
Estou criando um Gem 3.0.3 do Rails e não consigo fazer funcionar:
# attached.rb
module Attached
require 'attached/railtie' if defined?(Rails)
def self.include(base)
base.send :extend, ClassMethods
end
module ClassMethods
def acts_as_fail
end
end
end
# attached/railtie.rb
require 'attached'
require 'rails'
module Attached
class Railtie < Rails::Railtie
initializer 'attached.initialize' do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.send :include, Attached
end
end
end
end
eu recebo undefined local variable or method 'acts_as_fail'
Quando eu adiciono acts_as_fail
para qualquer um dos meus ActiveRecord
modelos. Por favor ajude! Estou extremamente frustrado com esse código aparentemente trivial! Obrigado!
Solução
Você está definindo self.include
(4ª linha abaixo), quando o método correto é self.included
.
Outras dicas
Você pode simplificar o código usando extend
diretamente:
# attached.rb
module Attached
require 'attached/railtie' if defined?(Rails)
def acts_as_fail
end
end
# attached/railtie.rb
require 'attached'
require 'rails'
module Attached
class Railtie < Rails::Railtie
initializer 'attached.initialize' do
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.send :extend, Attached
end
end
end
end
Essa é uma boa leitura:http://yehudakatz.com/2009/11/12/better-ruby-idioms/
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow