【问题标题】:Rendering partials in haml and passing variable to it在haml中渲染部分并将变量传递给它
【发布时间】:2016-01-13 05:50:50
【问题描述】:

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

我在这里渲染它

(dogs.html.haml)

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

然后我希望变量 dog 在我的部分中可见

(_dog.html.haml)

.title
  = dog.name

但它不可见

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    您将两种不同的局部渲染方式混合在一起。

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

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

    【讨论】:

    • 您也可以使用= render partial: "dog", collection: @dogs 渲染集合,这将自动为您创建一个dog 局部变量(relevant docs)
    • @etdev 同样,这是您应该避免的过时方式。更好的方法是简单地= render @dogs,这是新的功能相同的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2019-08-13
    相关资源
    最近更新 更多