Mik*_*ell 3 ruby-on-rails rails-engines
我正在编写一些装饰器来覆盖此处所述的 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
Run Code Online (Sandbox Code Playgroud)
我的应用程序找不到该方法,在 rails 控制台中我尝试对其进行测试:
# rails c
MyEngine::User.find_by_name_or_mis_id "John"
NoMethodError: undefined method `find_by_name_or_mis_id' for #<Class:0x007fcb85a45580>
Run Code Online (Sandbox Code Playgroud)
我可以通过require '/models/my_engine/user_decorator'在控制台上做来让它工作,为什么 rails 不接我的装饰器?
好吧,经过相当多的来回走动,结果似乎并没有自动加载。需要的是(在他们将其提取到这个 gem之前,从forem repo 中提取):
# MyEngine
# lib/my_engine/engine.rb
module MyEngine
class Engine < ::Rails::Engine
isolate_namespace MyEngine
config.to_prepare do
Dir.glob(Rails.root + "app/decorators/**/*_decorator*.rb").each do |c|
require_dependency(c)
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我将在文档上提出一张票,以便他们可以包含这些信息,看看他们详细介绍了装饰器,但不解释您实际如何加载它们(假设这些都已为您处理)。
更新:我确实提出了一张票,并相应地更新了指南。
| 归档时间: |
|
| 查看次数: |
3023 次 |
| 最近记录: |