使用ApplicationController.renderer.render从控制器外部渲染的Rails 5不会在self上设置变量

时间:2016-06-15 22:06:18

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5

我正在使用Rails 5 ApplicationController.renderer.render方法在模型中进行渲染。我需要将一些变量传递给我使用locals选项完成的布局;如果直接访问此布局,则可以在布局中使用此变量,但不能通过self

以下是我设置渲染的方法

html_string = ApplicationController.renderer.render(
  file: "/#{template_path}/base/show",
  :formats => [:pdf,:html],
  locals: {
    :@routing_form => self,
    :controller_name => controller_name,
    :action_name => action_name,
    :current_user => current_user
  },
  :layout  => '/layouts/application'
)

然后在布局中我想做这样的事情。

<div id="foo" class="<%= self.action_name %>">

我能够通过在此特定实例中删除self来实现此功能

<div id="foo" class="<%= action_name %>">

但现在我担心的是如何设置一个变量以便它可以与self一起正常工作?以前我使用的是render_anywhere gem,这是使用rendering_controller.var = "value"

处理的

1 个答案:

答案 0 :(得分:3)

由于self是Ruby中的关键字,因此您无法在布局模板中将其用作方法调用,因此您应该使用其他名称来传递本地。

你可以传递像my_object: self这样的东西,它会正常工作。

如果您想使用@命名密钥,则应将其放在字符串'@my_object': self内并在模板中正常调用:<%= @my_object.action_name%>