我正在关注Ruby on Rails教程,并在尝试将变量传递给partials时遇到了问题。
我的_user
部分如下
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>
我想传递一个数字来表示大小值。我正在尝试如下,没有任何运气。
<%= render @users, :locals => {:size => 30} %>
提前致谢!
答案 0 :(得分:167)
来自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 %>
因此,您可以使用传递局部变量size
进行渲染,如下所示:
<%= render @users, size: 50 %>
然后在_user.html.erb
partial:
<li>
<%= gravatar_for user, size: size %>
<%= link_to user.name, user %>
</li>
请注意,size: size
相当于:size => size
。
答案 1 :(得分:147)
如果您要传递本地语
,则需要完整的渲染部分语法<%= render @users, :locals => {:size => 30} %>
变为
<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>
或者使用新的哈希语法
<%= render partial: 'users', collection: @users, locals: {size: 30} %>
我认为更具可读性
答案 2 :(得分:4)
无论
render partial: 'user', locals: {size: 30}
或者
render 'user', size: 30
要使用locals
,您需要partial
。如果没有partial
参数,您可以直接列出变量(不在locals
)
答案 3 :(得分:3)
如果您使用JavaScript进行渲染,请使用escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");
答案 4 :(得分:3)
locals
在Rails 4.2中,我必须删除locals
部分,而仅使用size: 30
。否则,它将无法正确传递局部变量。
例如,使用此:
<%= render @users, size: 30 %>
答案 5 :(得分:1)
在语法上略有不同,但在我看来它看起来更干净:
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" }
答案 6 :(得分:1)
ou能够在局部上调用render函数后创建局部变量,因此,如果要自定义局部,则可以通过以下方式呈现局部_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%>