Ruby on rails 局部变量不适用于rails 5.1中的控制器渲染

Ruby on rails 局部变量不适用于rails 5.1中的控制器渲染,ruby-on-rails,ruby-on-rails-5.1,Ruby On Rails,Ruby On Rails 5.1,我有一个控制器操作,它使用print.html.erb模板呈现页面的可打印版本。控制器代码为: def print @title = 'Print - Drill' render :show, layout: 'print', locals: { back_pth: drill_path(@drill) } end 在print.html.erb中有一行: <%= link_to 'Back', back_pth, class: 'print_link' %>

我有一个控制器操作,它使用
print.html.erb
模板呈现页面的可打印版本。控制器代码为:

def print
    @title = 'Print - Drill'
    render :show, layout: 'print', locals: { back_pth: drill_path(@drill) }
end
print.html.erb
中有一行:

<%= link_to 'Back', back_pth, class: 'print_link' %>

但这会产生一个错误:

ActionView::Template::Error:
       undefined local variable or method `back_pth' for #<#<Class:0x007fd6004e1230>:0x007fd5f7da57d0>
ActionView::Template::错误:
未定义的局部变量或方法“back_pth”#

打印模板由许多不同的控制器操作调用,因此如何修复此问题?这段代码在rails 5.0.6中运行。

我不太确定这是否属于答案,但可能是您正在经历的


也许,现在,您可以将代码移动到
show
操作,即使它在布局中不起作用。

正如FarazPantakar所指出的,这是rails 5.1 ActionController中的一个。问题报告有一个变通方法,即在html中使用本地_分配,因此链接变为

<%= link_to 'Back', local_assigns[:back_pth], class: 'print_link' %>


print.html.erb是布局吗?您是否尝试过
render:show,back\u pth:drill\u path(@drill),布局:'print'
?只是想知道什么是
back\u pth
,helper方法?7urkm3n,它不是一个助手,它是渲染的局部变量。Akovtunov,您的建议不起作用,只是抛出和异常。如果您在下面看到FaraPantankar的答案,它看起来像是5.1.6中的一个bug,它看起来确实像rails 5.1.4中引入的bug。在每种情况下,都有一个相应的显示动作,其思想是当有人想要页面的可打印版本时,他们单击指向打印动作的链接,该链接提供可打印版本,单击“返回”链接将返回屏幕上可查看的显示动作。