我正在使用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"
答案 0 :(得分:3)
由于self
是Ruby中的关键字,因此您无法在布局模板中将其用作方法调用,因此您应该使用其他名称来传递本地。
你可以传递像my_object: self
这样的东西,它会正常工作。
如果您想使用@命名密钥,则应将其放在字符串'@my_object': self
内并在模板中正常调用:<%= @my_object.action_name%>