我要创建一个Rails 3.0.3的宝石,它不能获得工作:

# 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

我得到undefined local variable or method 'acts_as_fail'当我添加acts_as_fail我的任何ActiveRecord模型。请帮忙!我非常有这个看似微不足道的代码沮丧!谢谢!

有帮助吗?

解决方案

您正在定义self.include(第四线向下),当正确的方法是self.included

其他提示

可以通过直接使用extend简化的代码:

# 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

这是一个良好的阅读: http://yehudakatz.com/2009/11/12/better-ruby-成语/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top