[英]Reopen Impression Class from Impressionist Gem in Rails 4
我试图修改印象派宝石类“印象”无济于事。
我尝试过以下方法:
class Impression
def hello
"world"
end
end
Impression.class_eval do
end
在:/app/models/impression.rb和/lib/impression.rb中(包含此文件夹的正确配置)
我究竟做错了什么? 我正在使用Rails 4.理想情况下,我想添加一个活动记录关联并添加一些帮助方法。
我假设您正在谈论这个宝石: https : //github.com/charlotte-ruby/impressionist并想要更改模型类印象 。
从我可以看到它应该是一个rails引擎。
rails引擎用于命名空间,堆栈跟踪可能已经揭示了这一点。
你试过这个吗?
# app/extensions/impressionist/impression.rb
module Impressionist
class Impression
def hello
"world"
end
end
end
您也可以尝试将代码放在初始化程序中,因为它也可能是加载顺序问题。
试试这个:
require Impressionist::Engine.root.join('lib/impressionist/models/active_record/impression')
class Impression
def hello
"world"
end
end
如果您要覆盖gem提供的类,则需要手动要求您的版本来包含更改。 这通常在初始化程序中完成。
使用您自己的方法扩展模型类应该使用关注点来完成。 尝试将其放在lib
文件夹中的文件中,并在初始化程序中将其要求:
require Impressionist::Engine.root.join('lib/impressionist/models/active_record/impression')
module ImpressionExtensions
extend ActiveSupport::Concern
def some_instance_method
# do some stuff
end
module ClassMethods
def some_class_method
# do some stuff
end
end
end
Impression.send(:include, ImpressionExtensions)
应以类似的方式向任何模型添加方法。 Impressionist的工作方式有点不同,因为它首先将Impression类定义为常规的独立类,然后重写它并使其成为模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.