在宝石中扩展导轨模型
我想扩展在我的Rails应用程序中定义的模型调用配置。 出于某种架构原因,如果我可以将它扩展到宝石中,那将是非常棒的。
但在我的gem foo.rb文件中,如果我打电话给我的配置类:
Configuration.class_eval do ... end
它返回给我这个错误:
configuration: undefined method 'config' for nil:NilClass (NoMethodError)
如果我试过这个:
class Configuration
TEST = [:foo, :foo2].freeze
end
我无法访问我的rails应用程序中定义的activerecord类。
有没有办法重载gem中的一些rails类?
编辑:像这样的工作:)
module m
module ConfigurationExtension
extend ActiveSupport::Concern
included do
CONSTAZ = [:foo].freeze
end
module ClassMethods
def foo1
"foo1"
end
end
module InstanceMethods
def foo2
"foo2"
end
end
end
end
require 'm/mailtie.rb' if defined?(Rails)
在我的railtie文件模块m类mRailtie <:: Rails :: Railtie config.after_initialize do :: Configuration.send(:include,ConfigurationExtension)end end end
假设你在哪里使用你的宝石会有特定的类,这是非常错误的。 相反,你应该在gem中创建一个模块,并在你想要的模型中包含/扩展/关注它(在这种情况下是Configuration
)