【问题标题】:Rails: Rendering a template in a different namespaceRails:在不同的命名空间中呈现模板
【发布时间】:2015-06-10 19:19:14
【问题描述】:

如何渲染位于不同命名空间中的控制器的操作?

例如,如果我在 Webapp 命名空间 Webapp::LoginController 中有一个登录控制器,并且如果用户已登录,我想在 API 命名空间 API::EventsController 的事件控制器中呈现索引操作(不是部分!) :

class Webapp::LoginController < ApplicationController
  include Webapp::LoginHelper
  def index
    render 'events/index' if logged_in? # events#index is in the API namespace
   end
end

这可能吗?我认为答案是否定的,因为可能与子域和路径发生冲突,具体取决于路由的定义方式。

我知道我可以重定向到我想要的页面

redirect_to api_events_url

但这会创建一个我不一定想要的新请求。

【问题讨论】:

  • 你试过这个render action: 'events/index'
  • 是的,这不起作用,因为这指的是同一控制器中的操作。但是您给了我另一种方法的想法,尝试在路径上呈现文件 (render "/vagrant/app/views/api/events/index")。有趣的是,它不会在那里找到文件:Missing template app/views/api/events/index with {:locale=&gt;[:en], :formats=&gt;[:html], :variants=&gt;[], :handlers=&gt;[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/vagrant/app/views"

标签: ruby-on-rails namespaces


【解决方案1】:

这对我有用

render 'api/events/index'

【讨论】:

  • 这行得通,谢谢!我最初认为这会呈现部分内容,因为它会引发未定义的方法错误。我错过的是我调用的模板使用的部分需要由事件控制器设置一些变量,因此部分错误。为了将来参考,this question 列出了一些重用 API 控制器代码的干方法(我喜欢 apneadiving 的答案)——不推荐这样做,因为它忽略了 MVC 概念。其他可能性:辅助方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 2017-08-14
  • 2017-03-16
  • 1970-01-01
  • 2014-11-14
  • 2019-01-10
相关资源
最近更新 更多