2012-09-25 14 views
5

To jest mój kod do renderowania częściowe (kolekcja @parties jest generowany poprawnie, ja testowałem to):Przekazywanie zmiennej lokalnej do częściowego wewnątrz dla każdej szyny pętlowych 3

 <% @parties.each do |party| %> 
      <div class="item"> 
       <%= render 'parties/party', :object => party %> 
      </div> 
     <% end %> 

I to jest kod w częściowej:

<%= party.name %> 

jednak, pojawia się następujący błąd:

undefined method `name' for nil:NilClass 

jestem na moim koniec rozum, komuś pomóż: - |

Ponadto, jest to kod dla kontrolera do renderowania widok zawierający częściową (kontroler nazywa default_controller):

def index 
    @parties = Party.all 
end 

Czy to jakiegokolwiek znaczenia, że ​​to nie jest parties_controller?

Odpowiedz

10

Próbowałem coś jak poniżej i to działało

<%= render :partial => 'party', :object => party %> 

i mogę przejść jak party.name. zmienna lokalna pochodzi od nazwy częściowej, która jest tutaj party.

Uwaga: Im zakładając, że oba partials są parties_controller. To powinno działać.

Aktualizacja: Oto co ive próbował się ponownie

class PostsController < ApplicationController 
    #... ... 
    def index 
     @posts = Post.all 
     @comments = Comment.all #<---- Loading comments from PostsController 
     #... ... 
    end 
end 

#views/posts/index.html.erb 

<% @comments.each do |comment| %> 
    <%= render :partial=>"comments/comment", :object=>comment %> 
<% end %> 

#views/comments/_comment.html.erb 

<%= comment.body %> 

i jego worki ng :)

+0

Mimo że link http://apidock.com/rails/ActionController/Base/render jest przestarzały, zapewnia kilka dobrych przykładów renderowania. – Samiron

+0

Strona, która używa częściowego, nie jest renderowana przez stronę_controller - dlaczego jest to problem? (Kod wykorzystywanego kontrolera nadal pobiera wszystkie strony z bazy danych za pomocą @parties = Party.all). – nicohvi

+0

Ive zaktualizował mój wpis innym przykładem. Oto malutki projekt szyn, który daje przykład z. ** http: //goo.gl/bB9Ky**. Możesz pobrać i samemu zobaczyć w akcji :) – Samiron