【问题标题】:Rails 4 render partial with localsRails 4 局部渲染
【发布时间】:2016-11-12 21:27:44
【问题描述】:

我有一个部分_errors.html.haml来显示我的应用程序中的表单错误。部分内的代码:

.errors
  %ul
    - errors.full_messages.each do |message|
      %li= message

我将 projects/new.html.haml 中的部分渲染为

= render 'shared/errors', locals: { errors: @project.errors } if @project.errors.any?

错误部分位于views/shared 目录中。

但是当我尝试将错误部分呈现时出现错误。

undefined local variable or method errors' for #<#<Class:0x0055895405bbc0> :0x00558951a80fe0>

如果我将渲染线更改为

= render 'shared/errors', errors: @project.errors if @project.errors.any?

它有效。为什么在这种情况下使用 locals 不起作用?

【问题讨论】:

  • 我回答a question 有同样的问题。您可以查看render 的来源,看看为什么它不起作用。

标签: ruby-on-rails ruby-on-rails-4 partial-views actionview


【解决方案1】:

只是为了补充 Khanh 的答案。我已经尝试了所有的变化。看来,如果您想使用术语locals 进行Rails 部分渲染,则需要指定关键字partial

显式所以这可行

= render partial: 'shared/errors', locals: { errors: @project.errors } if @project.errors.any?

隐式或者简写为

= render 'shared/errors', errors: @project.errors if @project.errors.any?

因此,总而言之,如果您为渲染部分指定哈希键,则必须明确指定其所有键。否则,您将不必指定哈希键,并让 rails 根据位置隐式计算。

【讨论】:

    【解决方案2】:

    我猜你的问题是为locals创造条件。

    您可以尝试这样做:

    - if @project.errors.any?
      = render partial: 'shared/errors', locals: { errors: @project.errors }
    

    _errors.html.haml

    .errors
      %ul
        - test_errors.full_messages.each do |message|
          %li= message
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-24
      • 2013-06-20
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 2018-04-17
      相关资源
      最近更新 更多