在 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 部分。