2013-06-09 3 views
0

Dans mon application todo list, j'ai le code suivant dans mon ListsController:Erreur lors du rendu l'action d'un autre contrôleur

def create 
    @list= current_user.lists.build(params[:list]) 
    if @list.save 
    flash[:notice]= "New List created" 
    redirect_to controller: "pages",action: :home 
    else 
    render 'pages/home' 
    end 
end 

pages/home.html.erb

<% if signed_in? %> 
    <%= render 'home_signed_in' %> 
<% else %> 
    <%= render 'home_not_signed_in' %> 
<% end %> 

Le « home_signed_in. html.erb "et" home_not_signed_in.html.erb "sont présents dans le répertoire des pages. Alors, quand la liste que je tente de créer ne marche pas être sauvé, ce code est exécuté dans ListsController:

else 
    render 'pages/home' 
    end 

Et l'erreur suivante est jeté:

Missing partial lists/home_signed_in, application/home_signed_in with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: 
    * "/home/lnreddy/my_rails_projects/todo_app/app/views"

Pourquoi est-il pas la recherche dans les pages/dossier? Je suis confus.

Répondre

1

L'utilisation de render dans votre contrôleur ne rend pas cette action, il rend que affiche. Vous effectuez le rendu pages/home dans le contexte du ListsController, donc lorsque cette vue recherche la partie 'home_signed_in' partielle, elle regarde dans le dossier du contrôleur courant, qui est le contrôleur des listes (et le dossier des listes).

Si vous souhaitez vous assurer que la vue rend la partie partielle du même dossier, préfixez-la avec le nom du dossier, par exemple. 'home/home_signed_in'. Ou si le partiel doit être partagé entre plusieurs contrôleurs, déplacez-le dans le dossier de l'application (toutes les vues reviennent à la lecture de ce dossier, comme les listes de messages d'erreur). Pour plus d'informations sur les partiels, voir http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials.

+0

Merci beaucoup .. c'est ce que je soupçonnais. – lnreddy

Questions connexes