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

locals not working for controller rendering in 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' %>

但这会产生错误:

ActionView::Template::Error:
       undefined local variable or method `back_pth' for #<#<Class:0x007fd6004e1230>:0x007fd5f7da57d0>

打印模板被许多不同的控制器操作调用,那么我该如何解决这个问题?此代码适用于 rails 5.0.6.

我不太确定这是否属于答案,但 this 可能是您遇到的问题?

也许,现在,您可以将代码移至 show 操作,因为即使它在布局中不起作用,它也能正常工作。

正如 FarazPantakar 所指出的,这是 rails 5.1 ActionController 中的一个 issue。问题报告有一个解决方法,即在 html 中使用 local_assigns,因此 link 变为

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