我创建了一个引擎,它将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
对我而言,看起来宝石甚至不知道细胞,但据我所知,我不允许在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上找到(这不应该是任何广告,以防任何人需要其他信息) 。
答案 0 :(得分:0)
您正在呼叫CriteriaOperator::UiComponent::CriteriaEditor
,但该类/模块似乎不存在。
CriteriaOperator::UiComponent::Engine
可以正常运行,因为它是在引擎本身中定义的。
我猜想您的示例应用程序可以工作,因为它使用的是基于视图的调用,例如cell('criteria_operator/ui_component/criteria_editor')
,该调用可能与javascript一起工作?如果不将单元格定义为此类,就不能使用“代码”版本:
https://github.com/trailblazer/cells#cell-class