是否有可能将本地人通过部分传递到另一部分?

时间:2014-08-19 14:47:23

标签: ruby-on-rails partials

这是一个说明问题的例子:

应用程序/视图/帖/ show.html.haml

.post
  = render partial: 'avatar', locals: { user: @post.user }
  = @post.title

应用程序/视图/共享/ _avatar.html.haml

.avatar
  = render partial: 'avatar_image', locals: { user: user }
  = user.name

应用程序/视图/共享/ _avatar_image.html.haml

= image_tag user.image.url

将部分_avatar.html.haml收到的本地人传递到部分_avatar_image.html.haml将无需重复本地人(此处:{ user: user })。

我知道,我可以使用实例变量。但我想知道是否有办法将所有收到的当地人一般性地传递给基础部分。

2 个答案:

答案 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