在haml中渲染部分并将变量传递给它

时间:2015-10-14 23:12:59

标签: ruby ruby-on-rails-3 ruby-on-rails-4 haml

我试图通过迭代变量然后将特定变量传递给部分来渲染我的部分,但是它没有看到这个变量。

我在这里渲染

(dogs.html.haml)

- dogs.each do |dog|
    .dog
      = render 'dog', :locals => { :dog => dog }

然后我希望变量狗在我的部分

中可见

(_ dog.html.haml)

.title
  = dog.name

但它不可见

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你将两种不同的呈现部分的方式混合在一起。

使用此(旧版)表单...

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