Rails 4 - 将变量传递给partial

dop*_*ner 114 ruby-on-rails

我正在关注Ruby on Rails教程,并在尝试将变量传递给partials时遇到了问题.

我的_user部分内容如下

<li>
  <%= gravatar_for user, size: 52 %>
  <%= link_to user.name, user %>
</li>
Run Code Online (Sandbox Code Playgroud)

我想传递一个数字的大小值.我没有任何运气我尝试如下.

<%= render @users, :locals => {:size => 30} %>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Kar*_*bol 172

来自PartialRender上的Rails api :

渲染默认情况

如果您不打算使用任何选项(如集合或布局),您还可以使用渲染的简写默认值来渲染部分.

例子:

# Instead of <%= render partial: "account" %>
<%= render "account" %>

# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>

# @account.to_partial_path returns 'accounts/account', so it can be used to replace:
# <%= render partial: "accounts/account", locals: { account: @account} %>
<%= render @account %>

# @posts is an array of Post instances, so every post record returns 'posts/post' on `to_partial_path`,
# that's why we can replace:
# <%= render partial: "posts/post", collection: @posts %>
<%= render @posts %>
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用传递局部变量size进行渲染,如下所示:

<%= render @users, size: 50 %>
Run Code Online (Sandbox Code Playgroud)

然后在_user.html.erb部分中使用它:

<li>
    <%= gravatar_for user, size: size %>
    <%= link_to user.name, user %>
</li>
Run Code Online (Sandbox Code Playgroud)

注意size: size相当于:size => size.

  • 第二个渲染,一个没有当地人,拯救了我的生命.谢谢 (13认同)

jam*_*esc 152

如果要传递本地,则需要完整的渲染部分语法

<%= render @users, :locals => {:size => 30} %>
Run Code Online (Sandbox Code Playgroud)

<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>
Run Code Online (Sandbox Code Playgroud)

或者使用新的哈希语法

<%= render partial: 'users', collection: @users, locals: {size: 30} %>
Run Code Online (Sandbox Code Playgroud)

我认为这更具可读性

  • 您可以省略`locals`哈希来使用短版本,如下所示:`<%= render @users,size:30%>` (3认同)
  • 我也将在没有`collection`属性的情况下工作 (2认同)

Mir*_*318 6

要么

render partial: 'user', locals: {size: 30}
Run Code Online (Sandbox Code Playgroud)

要么

render 'user', size: 30
Run Code Online (Sandbox Code Playgroud)

要使用locals,您需要partial。没有partial参数,您可以直接列出变量(不在内locals


Jos*_*ter 5

不要locals在 Rails 4.2+ 中使用

在 Rails 4.2 中,我不得不移除该locals部分并size: 30改为使用。否则,它不会正确传递局部变量。

例如,使用这个:

<%= render @users, size: 30 %>
Run Code Online (Sandbox Code Playgroud)

  • 对此进行快速澄清。如果由于某种原因,您需要指定“partial”键,例如当使用与部分不匹配的对象数组时,您仍然需要使用“locals”。但是当使用这种简写方法时,你_需要_省略`locals`。 (3认同)