【发布时间】: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=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/vagrant/app/views"