2017-01-19 5 views
0

Je reçois le message d'erreur suivant. J'ai fait des recherches d'autres postes, mais dans mon cas, il n'y a pas d'autre être rendu partiel appelé donc je ne suis pas sûr de savoir pourquoi je reçois cette erreur ...AbstractController :: DoubleRenderError dans Home # index

Showing /home/ubuntu/workspace/app/views/home/index.html.erb where 
line #11 raised: 

Render and/or redirect were called multiple times in this action. 
Please note that you may only call render OR redirect, and at most 
once per action. Also note that neither redirect nor render terminate 
execution of the action, so if you want to exit an action after 
redirecting, you need to do something like "redirect_to(...) and 
return". 

source décompressée (autour de la ligne n ° 7):

 image_tag(user.avatar, class: 'avatar-circle') 
    else 
     render partial: 'shared/avatar', locals: { user: user } 
    end 
    end 
end 

Voici mon code:

app/controllers/home_controller.rb

class HomeController < ApplicationController 
    include UsersHelper 
    helper_method :show_avatar 

    def index 
    @posts = Post.all 
    end 
end 

une pp/contrôleurs/préoccupations/users_helper.rb

module UsersHelper 

    def show_avatar(user) 
    if user.avatar? 
     image_tag(user.avatar, class: 'avatar-circle') 
    else 
     render partial: 'shared/avatar', locals: { user: user } 
    end 
    end 
end 

app/views/home/index.html.erb

<% @posts.each do |post| %> 
    <div class="col-sm-6 col-md-4"> 
    <div class="thumbnail"> 
     <%= image_tag post.picture.url %> 
     <div class="caption"> 
     <%= show_avatar(post.user) %> 
     <p><strong><%= post.user.full_name %></strong> - <%= post.description %></p> 
     <p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#" class="btn btn-default" role="button">Button</a></p> 
     </div> 
    </div> 
    </div> 
<% end %> 

La seule chose que je peux penser est que l'est appelé partielle dans la boucle pour chaque poste, mais sûrement cela ne peut pas être le problème?

+1

pourrait-il être utile: https://www.ruby-forum.com/topic/53487#30113 Vous ne ** rendez pas ** d'un assistant, mais plutôt ** renvoyez une valeur ** – shybovycha

Répondre

0

Vous ne pouvez pas rendre html dans une méthode d'aide, vous devez le construire.

def show_avatar(user) 
    if user.avatar? 
    image_tag(user.avatar, class: 'avatar-circle') 
    else 
    render partial: 'shared/avatar', locals: { user: user } 
    end 
end 

Essayez modifier le code dans else déclaration à quelque chose de semblable à le modèle shared/avatar:

content_tag(:div, 'something', class: 'whatever') 

Ou vous pouvez déplacer la logique-shared/avatar à gérer quand user.avatar?