渲染另一个命名空间的一部分

Pav*_*vel 2 ruby ruby-on-rails ruby-on-rails-3

我有个问题。我需要使用另一个命名空间的部分内容来渲染对象。

 render complain.target
Run Code Online (Sandbox Code Playgroud)

它尝试从当前命名空间渲染部分内容(当前是admin

缺少部分管理/公告/公告...

我不需要从 admin/.. 渲染它

我无法指定部分路径,例如

render partial: '/bulletins/bulletin', locals: { bulletin: complain.target }
Run Code Online (Sandbox Code Playgroud)

但它是多态关联,并且使用不同的部分路径。有什么办法可以做到吗?提前致谢!

stw*_*ert 5

似乎没有可能的方法可以通过调用来实现这一点render complain.target(在 Rails 5 源代码上检查)。

不过,action_view 有一个配置选项可以禁用部分名称空间前缀:

     Rails.application.config.action_view.prefix_partial_path_with_controller_namespace = false
Run Code Online (Sandbox Code Playgroud)

编辑

今天,我使用了另一种解决方案:将单表继承模型渲染为局部模型时,可以在调用渲染局部模型时根据 Rails model_name 查找传递局部变量名称:

<%= render partial: "admin/#{object.to_partial_path}", 
           locals: { object.model_name.element => object } 
%>
Run Code Online (Sandbox Code Playgroud)