【问题标题】:locals not working for controller rendering in rails 5.1本地人不适用于 Rails 5.1 中的控制器渲染
【发布时间】:2018-02-05 09:20:17
【问题描述】:

我有一个控制器操作,它使用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 中有效。

【问题讨论】:

  • print.html.erb 是布局?
  • 你试过render :show, back_pth: drill_path(@drill), layout: 'print' 吗?
  • 想知道什么是back_pth,辅助方法?
  • 7urkm3n,它不是助手,它是渲染的局部变量。
  • Akovtunov,你的建议不起作用,只是抛出和异常。如果您在下面看到 FaraPantankar 的答案,它看起来像是 5.1.6 中的一个错误

标签: ruby-on-rails ruby-on-rails-5.1


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 它看起来确实像 rails 5.1.4 中引入的错误。在每种情况下,都有一个相应的显示操作,其想法是,当有人想要页面的可打印版本时,他们单击指向打印操作的链接,该链接提供可打印版本,单击“返回”链接带您返回屏幕可视显示操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    相关资源
    最近更新 更多