我有一个这样渲染的视图:
action_controller.render_to_string(
layout: 'document',
template: 'administrator/users/export',
encoding: 'UTF-8',
formats: [:pdf],
handlers: [:erb],
locals: {
testvar: "test"
}
)
我正在尝试在指定的文档布局中使用此 testvar 变量:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="document">
<head>
<title>
<%= "Test: #{testvar}" %>
</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body class="document pdf">
<%= yield %>
</body>
</html>
但是我遇到了这个异常:
*** NameError 异常:#ActionView::Base:0x000000000142f8 的未定义局部变量或方法“testvar”
我也无法在布局中获取任何实例变量。
如何在 Rails 7 中执行此操作?这在 Rails 6 中是可以做到的。
问题不在于如何传递变量,而在于如何访问它们。
您可以通过
local_assigns
访问当地人:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="document">
<head>
<title>
Test: <%= local_assigns[:testvar] %>
</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1">
</head>
<body class="document pdf">
<%= yield %>
</body>
</html>
但是由于某些隐晦的原因,布局无法像视图那样访问实际的局部变量。如果您在以下位置放置断点,您可以看到这一点:
(ruby) local_assigns
{:title=>"Hello World"}
(ruby) defined?(title)
nil