2013-04-26 26 views
95

Tôi đang làm theo hướng dẫn Ruby on Rails và đã gặp một vấn đề trong khi cố chuyển các biến cho partials.Rails 4 - chuyển biến cho một phần

_user một phần của tôi là như sau

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

Tôi muốn vượt qua trong một số cho giá trị kích thước. Tôi đang cố gắng như sau mà không có bất kỳ may mắn.

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

Cảm ơn bạn trước!

Trả lời

133

Bạn cần đầy đủ render cú pháp từng phần nếu bạn đang đi qua người dân địa phương

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

trở thành

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

Hoặc để sử dụng cú pháp băm mới

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

Mà tôi nghĩ là nhiều dễ đọc hơn

+0

Cảm ơn @jamesw, Nhưng hình ảnh vẫn còn kích thước 52. Có phải vì Tôi có kích thước được đặt thành 52 rõ ràng trong một phần không? – dopplesoldner

+1

Có thực sự, bạn đang ghi đè giá trị trước đó của kích thước. –

+1

tôi cũng sẽ làm việc mà không có thuộc tính 'collection' – ImranNaqvi

146

Từ api Rails trên PartialRender:

Rendering trường hợp mặc định

Nếu bạn sẽ không được sử dụng bất kỳ tùy chọn như bộ sưu tập hoặc bố trí, bạn cũng có thể sử dụng ngắn tay mặc định của render để render partials.

Ví dụ:

# 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 %> 

Vì vậy, bạn có thể sử dụng thông qua một biến địa phương size để trả lại như sau:

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

và sau đó sử dụng nó trong các _user.html.erb phần:

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

Lưu ý rằng size: size tương đương với :size => size.

+12

Biểu hiện thứ hai, cái không có người dân địa phương , cứu cuộc đời tôi. Cảm ơn – cassioscabral

2

Nếu bạn đang sử dụng JavaScript để render sau đó sử dụng escape_JavaScript("<%=render partial: partial_name, locals=>{@newval=>@oldval}%>");

0

Cú pháp hơi khác một chút nhưng có vẻ sạch hơn trong quan điểm của tôi:

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" } 
Các vấn đề liên quan