我正在编写一些装饰器来覆盖一个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没有识别我的装饰器?
Rails.root.join('app', 'decorators', '**', '*_decorator*.rb')
- Sarah Vessels