Простое расширение активной записи Railtie
Я создаю гем 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
моделей. Пожалуйста помоги! Я чрезвычайно разочарован этим, казалось бы, тривиальным кодом! Спасибо!
2 ответа
Решение
Вы определяете self.include
(4-я строка вниз), когда правильный метод 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-idioms/