Rails 4-将变量传递到局部

我正在学习 Ruby on Rails 教程,在尝试将变量传递给局部变量时遇到了一个问题。

我的 _user部分如下

<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>

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

<%= render @users, :locals => {:size => 30} %>
146567 次浏览

如果要传递局部变量,则需要完整呈现部分语法

<%= render @users, :locals => {:size => 30} %>

变成

<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>

或者使用新的哈希语法

<%= render partial: 'users', collection: @users, locals: {size: 30} %>

我觉得这样更容易理解

来自 部分渲染的 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 %>

因此,您可以使用传递一个局部变量 size来呈现如下内容:

<%= render @users, size: 50 %>

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

<li>
<%= gravatar_for user, size: size %>
<%= link_to user.name, user %>
</li>

请注意,size: size等效于 :size => size

如果使用 JavaScript 进行渲染,那么使用 escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

句法上有些不同,但在我看来更干净:

render 'my_partial', locals: { title: "My awesome title" }


# not a big fan of the arrow key syntax
render 'my_partial', :locals => { :title => "My awesome title" }

都行

render partial: 'user', locals: {size: 30}

或者

render 'user', size: 30

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

不要在 Rails 4.2 + 中使用 locals

在 Rails 4.2中,我必须删除 locals部分,只使用 size: 30代替。否则,它将无法正确传递局部变量。

例如,使用以下方法:

<%= render @users, size: 30 %>

一旦你调用了局部渲染函数,你就可以创建局部变量,因此,如果你想自定义一个局部,你可以通过以下方式渲染局部 _form.html.erb:

<%= render 'form', button_label: "Create New Event", url: new_event_url %>
<%= render 'form', button_label: "Update Event", url: edit_event_url %>

通过这种方式,您可以在部分中访问到按钮的标签和 URL,如果您尝试创建或更新记录,它们是不同的。 最后,为了访问这个本地变量,您必须在代码 local_assigns[:button_label](local_assigns[:name_of_your_variable])中输入

<%=form_for(@event, url: local_assigns[:url]) do |f|  %>
<%= render 'shared/error_messages_events' %>
<%= f.label :title ,"Title"%>
<%= f.text_field :title, class: 'form-control'%>
<%=f.label :date, "Date"%>
<%=f.date_field :date, class: 'form-control'  %>
<%=f.label :description, "Description"%>
<%=f.text_area :description, class: 'form-control'  %>
<%= f.submit local_assigns[:button_label], class:"btn btn-primary"%>
<%end%>