这是一个说明问题的例子:
.post
= render partial: 'avatar', locals: { user: @post.user }
= @post.title
.avatar
= render partial: 'avatar_image', locals: { user: user }
= user.name
= image_tag user.image.url
将部分_avatar.html.haml
收到的本地人传递到部分_avatar_image.html.haml
将无需重复本地人(此处:{ user: user }
)。
我知道,我可以使用实例变量。但我想知道是否有办法将所有收到的当地人一般性地传递给基础部分。
答案 0 :(得分:16)
您可以使用local_assigns
来访问传递给部分
.avatar
= render partial: 'avatar_image', locals: local_assigns
= user.name
答案 1 :(得分:0)
您可以使用实例变量,它们通常在Controller的操作中定义,并在操作,视图和所有部分使用之间共享。
def show
@post = Post.find(params[:id])
@user = @post.user
end
# /posts/show.html.haml
.post
= render partial: 'avatar', locals: { user: @post.user }
= @post.title
# /shared/_avatar.html.haml
.avatar
= render partial: 'avatar_image'
= @user.name
# /shared/_avatar_image.html.haml
= image_tag @user.image.url
您无法自动将局部变量传递给所有相关的部分视图(如果是,那么它将与实例变量相同)。
您需要手动执行此操作,以“过滤”每个部分所需的变量:
# /posts/show.html.haml
.post
= render partial: 'avatar', locals: { user: @post.user }
= @post.title
# /shared/_avatar.html.haml
.avatar
= image_tag user.image.url
= user.name
# This partial only needs a `User` instance, nothing else