Truyền một biến thành một phần, đường ray 3?


140

Tôi có một vòng lặp như vậy:

<% @posts.each do |post| %>
  <% render middle %>
<% end %>

Sau đó, trong phần giữa của tôi, làm thế nào để tôi truy cập bài viết hiện tại?


Xin chào Elliot Tôi đang sử dụng cái này trên giàn giáo tiêu chuẩn. Sử dụng bên trong index.html.erb để hiển thị _show.html.erb trong đó hiển thị một phần chứa phương thức. mọi thứ đều hoạt động tốt, ngoại trừ khi tôi nhấn show liên kết, nó sẽ hiển thị cùng một id thay vì hiển thị các id khác nhau.
người học

Câu trả lời:


237

Thử cái này:

<% @posts.each do |post| %>
  <%= render 'middle', :post => post %>
<% end %>

Như thế này, bạn sẽ có một biến cục bộ postcó sẵn trong một phần.


18
bạn cần thẻ <% =%> chứ không phải <%%> nếu không nó sẽ không hiển thị
Ryan

4
Hãy ghi nhớ, bạn sẽ cần <%= render 'middle', :post => post %>đường ray 3.1.x
Archonic

124

Đưa nó cho một phần như một biến cục bộ

<%= render :partial => 'middle', :locals => { :post => post } %>

Tất nhiên, đường ray cũng có một lối tắt để kết xuất bộ sưu tập:

<%= render :partial => 'post', :collection => @posts %>

Trong trường hợp này, nó sẽ gọi một phần bài đăng cho mỗi bài đăng với một biến cục bộ 'bài đăng'

Bạn thậm chí có thể kết xuất một mẫu đệm giữa mỗi bài:

<%= render :partial => 'post', :collection => @posts, :spacer_template => 'post_divider' %>

14
Không biết về tùy chọn: spacer_template, thực sự rất hay. Cảm ơn!
Claudio Acciaresi

11
Lưu ý rằng băm: localals không cần thiết khi sử dụng Rails 3. Hàm băm đối số được chuyển đổi thành đối số được truyền cho một phần.
siêu sáng

4
Tôi vẫn cần: băm
cục bộ

1
<%= render :partial => 'post', :collection => @posts, as: :post %>sẽ tự động lặp qua từng postphần của bạn, vì vậy bạn có thể sử dụng postmột phần của mình làm biến.
ahnbizcad

14
<% @posts.each do |post| %>
  <% render middle, :post => post %>
<% end %>

Bây giờ bạn có thể truy cập bài viết dưới dạng biến cục bộ posttrong một phần


10

Thay thế <%= render middle %>bằng <%= render middle, :post => post %>. Sau đó, middlemột phần của bạn , bạn có thể truy cập vào postbiến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.