我正在跟随 Ruby on Rails 的教程,尝试将变量传递到局部视图时遇到了问题。
我的 _user
局部视图如下:
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>
我想传递一个数字作为尺寸值。我尝试了以下方法,但没有成功。
<%= render @users, :locals => {:size => 30} %>
我正在跟随 Ruby on Rails 的教程,尝试将变量传递到局部视图时遇到了问题。
我的 _user
局部视图如下:
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>
我想传递一个数字作为尺寸值。我尝试了以下方法,但没有成功。
<%= render @users, :locals => {:size => 30} %>
来自Rails api关于PartialRender的介绍:
渲染默认情况
如果您不会使用任何选项,例如collections或layouts等选项,则还可以使用render的简写默认值来渲染partials。
示例:
# 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
是等价的。
如果您要传递本地变量,您需要完整的渲染部分语法。
<%= render @users, :locals => {:size => 30} %>
成为<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>
或者使用新的哈希语法。
<%= render partial: 'users', collection: @users, locals: {size: 30} %>
我认为这更易读。
locals
哈希表,使用简写形式,如下所示:<%= render @users, size: 30 %>
。 - Pedro Adame Vergara无论是
render partial: 'user', locals: {size: 30}
或者
render 'user', size: 30
要使用locals
,您需要使用partial
。没有partial
参数,您只能直接列出变量(不在locals
内)。
locals
在Rails 4.2中,我必须删除locals
部分,只需使用size: 30
即可。否则,它将无法正确传递局部变量。
例如,使用以下内容:
<%= render @users, size: 30 %>
partial
关键字,例如使用不匹配部分的对象数组时,仍然需要使用 locals
。但是当使用这种简写方式时,必须省略 locals
关键字。 - Joshua Pinterescape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");
。当您在部分调用render函数时,可以创建局部变量,因此如果您想自定义部分,则可以例如通过以下方式呈现partial _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[: your_variable_name]
)
<%=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%>
语法上有一点不同,但我认为看起来更干净:
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" }