在 haml 中渲染部分并将变量传递给它
Rendering partials in haml and passing variable to it
我试图通过遍历变量来渲染我的部分,然后将特定变量传递给部分,但它没有看到这个变量。
这里我渲染一下
(dogs.html.haml)
- dogs.each do |dog|
.dog
= render 'dog', :locals => { :dog => dog }
然后我希望变量 dog 在我的部分中可见
(_dog.html.haml)
.title
= dog.name
但是不可见
我做错了什么?
您将两种不同的渲染方式混合在一起。
使用此(旧版)表单...
render partial: 'dog', locals: {dog: dog}
或这个较新的形式:
render 'dog', dog: dog
或这种更好的新形式,您应该更喜欢它:
= render dog
但不是您编写的版本。您已经从第二种方式中获取了 render 'dog'
部分,从第一种方式中获取了 locals: { dog: dog }
部分。它传递了一个名为 locals
的局部变量,它具有哈希值。
第三种方式是首选方式。如果您有一个 ActiveModel 对象,您可以简单地调用 render <object>
,它会 自动 根据模型名称为您选择正确的部分。
这也适用于 ActiveRecord 模型的集合。您应该完全放弃 @dogs.each
循环,而只是调用
= render @dogs
这将自动为集合中的每只狗调用= render dog
。您只需要将 .dog
移动到 _dog
部分。
我试图通过遍历变量来渲染我的部分,然后将特定变量传递给部分,但它没有看到这个变量。
这里我渲染一下
(dogs.html.haml)
- dogs.each do |dog|
.dog
= render 'dog', :locals => { :dog => dog }
然后我希望变量 dog 在我的部分中可见
(_dog.html.haml)
.title
= dog.name
但是不可见
我做错了什么?
您将两种不同的渲染方式混合在一起。
使用此(旧版)表单...
render partial: 'dog', locals: {dog: dog}
或这个较新的形式:
render 'dog', dog: dog
或这种更好的新形式,您应该更喜欢它:
= render dog
但不是您编写的版本。您已经从第二种方式中获取了 render 'dog'
部分,从第一种方式中获取了 locals: { dog: dog }
部分。它传递了一个名为 locals
的局部变量,它具有哈希值。
第三种方式是首选方式。如果您有一个 ActiveModel 对象,您可以简单地调用 render <object>
,它会 自动 根据模型名称为您选择正确的部分。
这也适用于 ActiveRecord 模型的集合。您应该完全放弃 @dogs.each
循环,而只是调用
= render @dogs
这将自动为集合中的每只狗调用= render dog
。您只需要将 .dog
移动到 _dog
部分。