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!

Foi útil?

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
scroll top