我有一个部分_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
?
答案 0 :(得分:3)
加上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?
总而言之,如果指定用于呈现partial的哈希键,则必须明确指定其所有键。否则,您将不必指定散列键,并让rails根据位置隐式地计算出来。
答案 1 :(得分:0)
我猜您的问题正在为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