解决 Rails 3.2 中控制器的视图路径

Posted

技术标签:

【中文标题】解决 Rails 3.2 中控制器的视图路径【英文标题】:Resolve the view path for a controller in Rails 3.2 【发布时间】:2012-04-18 13:38:26 【问题描述】:

我想要一个从一堆控制器呈现的共享 js 响应(视图)。它住在app/views/shared/success.js.erb

这是我的 大多数 控制器的标准响应,它使用一些内容修改 DOM。但是,此内容特定于呈现它的控制器。

问题是,我不知道如何从这个共享的 js 视图中解析特定控制器的视图路径。他是一个例子(包括一些命名空间控制器)

# app/controllers/users_controller.rb
class UsersController < ActionController::Base
  def create
    # do some stuff
    render 'shared/success' # .js.erb
  end
end

# app/controllers/settings/permissions_controller
class Settings::PermissionsController < ActionController::Base
  def create
    # do some stuff
    render 'shared/success' # .js.erb
  end
end

# app/views/users/success.html.erb
<p>Some View code that only relates to <strong>users</strong></p>

# app/views/settings/permissions/success.html.erb
<p>Some View code that only relates to <strong>permission settings</strong></p>

# app/views/shared/success.js.erb
var listItem = '<%= j render "#insert resolved path to this particular controller instance/success.html.erb" %>'
$(".list").append(listItem);

我之所以要这样做是因为js响应总是一样的,只是内容发生了变化。关于如何获取当前控制器的默认视图渲染路径有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以使用以下命令访问当前操作名称:

params[:action]  

然后您可以相应地自定义视图。

或者,您可以在这些控制器中使用您期望在 .js 视图中的值设置一个实例变量,然后在视图中使用它。

【讨论】:

以上是关于解决 Rails 3.2 中控制器的视图路径的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Rails 3 控制器中视图文件的默认路径?

从 MVC 中控制器中的不同方法向视图发送消息

OneThink插件中控制器访问路径控制

MVC模式中控制器(servlet)接收请求参数、调用DAO、保存处理结果、改变路径并转发(响应)

从 Rails 控制器访问资产路径

Spring MVC 中控制器的生命周期