【发布时间】:2018-09-28 02:00:06
【问题描述】:
在 rails 5.1 项目中,我有一个控制器,如 Api::V1::ResourcesController,其方法如 #create;我最终调用了render status: 201, formats: :json。正如我所料,这导致加载位于app/views/api/v1/resources/create.json.jbuilder 的Jbuilder 视图。
我最近将AccessGranted gem 添加到我的项目中,在这样做之后(没有代码更改),我发现我对render 的调用仍在产生所需的201 状态,但总是在产生@ 987654328@(单个空格字符)作为正文。此外,对pry 的一些检查似乎表明lookup_context 没有找到该文件,但是我不能说为什么会这样,因为我真的不知道如何在这里追踪因果层次结构。
更新:
我发现一旦我包含 AccessGranted,我的控制器类的祖先就不再包含 ActionView::Rendering。它按预期包含AccessGranted::Rails::ControllerMethods,但对祖先没有其他更改。
这里让我感到不安的是,AccessGranted 是一个小宝石,我已经能够在大约 20 分钟内完整地查看它,但没有任何迹象表明它为什么会与铁轨混在一起。是否有一些我可以在新 gem 中查找的特定内容,以通过将其包含在 gem 文件中来判断它可能会发生什么变化?
理想情况下,我想知道这里到底发生了什么,但即使没有,我也很难在动态 ruby 系统中导航以开始获取这些文件的可靠跟踪。我在调查中尝试过的一些事情:
- 检查了控制器对象。我看到它没有经历
formats或_prefixes的变化 - 浏览了导致设置响应的流程。 jbuilder 在
render_templates期间被调用,在好的情况下,但是在添加 gem 之后,它永远不会被调用 - 试图在窥探时直接在
lookup_context上调用方法,但未得出结论性结果。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5 actionview actioncontroller jbuilder