我正在编写一些装饰器来覆盖 Rails 引擎,如此处所述。我正在尝试从引擎向一个类添加一个简单的方法,这是我的代码:
# app/decorators/models/my_engine/user_decorator.rb
MyEngine::User.class_eval do
def self.find_by_name_or_mis_id str
where("CONCAT(#{table_name}.firstname, ' ', #{table_name}.surname) LIKE CONCAT('%', :s, '%') OR mis_id = :s", { s: str })
end
end
我的应用程序找不到该方法,并在 rails 控制台中尝试对其进行测试:
# rails c
MyEngine::User.find_by_name_or_mis_id "John"
NoMethodError: undefined method `find_by_name_or_mis_id' for #<Class:0x007fcb85a45580>
我可以通过require '/models/my_engine/user_decorator'
在控制台上进行操作来使其工作,为什么 rails 没有拾取我的装饰器?