【问题标题】:Simple Railtie Extension of Active RecordActive Record 的简单 Railtie 扩展
【发布时间】:2010-11-23 07:24:51
【问题描述】:

我正在创建一个 Rails 3.0.3 gem,但无法让它工作:

# 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

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

【问题讨论】:

    标签: ruby-on-rails ruby railtie


    【解决方案1】:

    当正确的方法是 self.included 时,您正在定义 self.include(向下第 4 行)。

    【讨论】:

    • 自拍脸...非常感谢瑞恩!
    【解决方案2】:

    您可以直接使用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-idioms/

    【讨论】:

      猜你喜欢
      • 2011-02-18
      • 2011-02-07
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多