我正在尝试修改Impressionist宝石类“Impression”无济于事。
我尝试了以下内容:
class Impression
def hello
"world"
end
end
Impression.class_eval do
end
两者都在: /app/models/impression.rb 和 /lib/impression.rb(包含此文件夹的配置正确)
我做错了什么?我正在使用Rails 4.理想情况下,我想添加一个活动记录关联并添加一些辅助方法。
答案 0 :(得分:1)
我假设你在谈论这个宝石:https://github.com/charlotte-ruby/impressionist 并希望更改模型类Impression。
从我可以看到它应该是一个rails引擎。
rails引擎用于命名空间,堆栈跟踪可能已经显示了这一点。
你试过这个吗?# app/extensions/impressionist/impression.rb
module Impressionist
class Impression
def hello
"world"
end
end
end
你也可以尝试将你的代码放在初始化程序中,因为它也可能是一个加载顺序问题。
答案 1 :(得分:1)
试试这个:
require Impressionist::Engine.root.join('lib/impressionist/models/active_record/impression')
class Impression
def hello
"world"
end
end
答案 2 :(得分:1)
如果您要覆盖gem提供的类,则需要手动要求您的版本来包含更改。这通常在初始化程序中完成。
答案 3 :(得分:1)
使用concern使用您自己的方法扩展模型类。尝试将其放在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类定义为常规的独立类,然后重写它并使其成为模型。