Ruby on Rails 튜토리얼을 따르고 있으며 변수를 부분적으로 전달하는 동안 문제가 발생했습니다.
내 _user
부분은 다음과 같습니다
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
</li>
크기 값에 대한 숫자를 전달하고 싶습니다. 나는 운없이 다음과 같이 노력하고 있습니다.
<%= render @users, :locals => {:size => 30} %>
답변
로컬을 전달하는 경우 전체 렌더링 부분 구문이 필요합니다.
<%= render @users, :locals => {:size => 30} %>
된다
<%= render :partial => 'users', :collection => @users, :locals => {:size => 30} %>
또는 새로운 해시 구문을 사용하려면
<%= render partial: 'users', collection: @users, locals: {size: 30} %>
훨씬 더 읽기 쉽다고 생각합니다
답변
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
부분 에서 사용하십시오 .
<li>
<%= gravatar_for user, size: size %>
<%= link_to user.name, user %>
</li>
그 주 size: size
에 해당합니다 :size => size
.
답변
어느 한 쪽
render partial: 'user', locals: {size: 30}
또는
render 'user', size: 30
사용하려면 locals
다음이 필요합니다 partial
. partial
인수가 없으면 변수를 직접 나열 할 수 있습니다 (내부가 locals
아님).
답변
locals
Rails 4.2 이상에서 사용하지 마십시오.
Rails 4.2에서는 locals
부품 을 제거하고 size: 30
대신 사용해야 했습니다. 그렇지 않으면 지역 변수를 올바르게 전달하지 않습니다.
예를 들어 다음을 사용하십시오.
<%= render @users, size: 30 %>
답변
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" }
답변
ou는 부분에서 렌더링 함수를 호출하면 로컬 변수를 만들 수 있으므로 부분을 사용자 지정하려는 경우 예를 들어 다음과 같이 부분 _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%>