我试图通过迭代变量然后将特定变量传递给部分来渲染我的部分,但是它没有看到这个变量。
我在这里渲染
(dogs.html.haml)
- dogs.each do |dog|
.dog
= render 'dog', :locals => { :dog => dog }
然后我希望变量狗在我的部分
中可见(_ dog.html.haml)
.title
= dog.name
但它不可见
我做错了什么?
答案 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
部分内。