如何传递局部变量来查看 Rails 7 中的布局?

问题描述 投票:0回答:1

我有一个这样渲染的视图:

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 中是可以做到的。

ruby-on-rails ruby-on-rails-7
1个回答
0
投票

问题不在于如何传递变量,而在于如何访问它们。

您可以通过

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
© www.soinside.com 2019 - 2024. All rights reserved.