我创建了一个引擎,它提供一个 ui 组件作为单元格。相应的 gem ( criteria_operator-ui_component ) 在 lib 文件夹中几乎不包含任何代码,因为要使单元格正常运行,我必须在资产路径中工作。gem 的基本文件如下所示:
require 'criteria_operator/ui_component/engine'
require 'cells/rails'
module CriteriaOperator
module UiComponent
# Your code goes here...
end
end
该引擎也不包含太多内容:
module CriteriaOperator
module UiComponent
class Engine < ::Rails::Engine
require 'jquery-rails'
require 'criteria_operator'
isolate_namespace CriteriaOperator::UiComponent
end
end
end
对我来说,看起来 gem 甚至不知道单元格,但据我所知,我不允许包含 lib 文件夹之外的任何内容。此外,在项目中的虚拟应用程序中测试单元工作正常。
现在我在一个真正的 Rails 应用程序中使用这个引擎。在 gemfile 中,我包含以下内容:
gem 'criteria_operator'
gem 'cells' # i added these three, because `bundler list` didn't show me
gem 'cells-rails' # `cells-rails` and `cells-erb` even though they are listed
gem 'cells-erb' # as dependencies for the engine
gem 'criteria_operator-ui_component'
我安装了路线
mount CriteriaOperator::UiComponent::Engine => '/criteria_operator-ui_component'
并尝试CriteriaOperator::UiComponent::CriteriaEditor
像在虚拟应用程序中那样使用单元格。内部erb:
cell('criteria_operator/ui_component/criteria_editor', @op)
或来自代码:
include Cell::RailsExtensions::ActionController
def whatever
cell(CriteriaOperator::UiComponent::CriteriaEditor, @op).call()
end
错误是ActionView::Template::Error (uninitialized constant CriteriaOperator::UiComponent::CriteriaEditor)
。
我究竟做错了什么?使用引擎时我只是遗漏了一些东西,还是引擎本身以错误的方式实现?如果是这样,为什么虚拟应用程序可以工作?我完全被困住了,这是我第一次创建 Rails 引擎,也是我第一次使用单元格......
引擎的完整代码(包括虚拟应用程序)可以在GitHub上找到(这不应该是任何广告,以防万一有人需要更多信息)。