2010-09-08 5 views
0

Je suis un guide de railscasts (http://asciicasts.com/episodes/154-polymorphic-association) pour faire des commentaires sur différents modèles, mais j'ai rencontré un problème.Essayer d'utiliser la relation polymorphe entre les commentaires et les modèles

Lorsque je tente d'aller à localhost: 3000/articles/id/commentaires/nouveau, je reçois l'erreur suivante:

undefined method `comments_path' for #<#<Class:0xb608b40>:0xb607a60> 

Il vient de mon formulaire de commentaire:

1: <%= form_for([@commentable, @comment]) do |f| %> 
2: <%#= render 'shared/error_messages', :object => f.object %> 
3: <div class="field"> 
4:  <%= f.label :title %><br /> 

Voici le contenu de la nouvelle méthode du contrôleur de commentaires:

def new 
    @comment = Comment.new 
    end 

Une chose qui diffère de la distribution, mon routes.db a ceci:

resources :articles do 
    resources :comments 
    end 

au lieu de ceci:

resources :articles, :has_many => :comments 

Je reçois une erreur de parcours si je ne le fais pas comme ça.

Une idée pourquoi? Je sais que le guide est un peu vieux, et je suis sur Rails 3.

Répondre

0

Vous n'avez pas affecté la variable @commentable dans ce votre action « nouveau »

il devrait être quelque chose comme

 
    def new 
    # This may need to change as per the class of the commentable field 
    @commentable = Article.find(params[:article_id'] 
    @comment = Comment.new 
    end 
0

Il semble que Rails n'aime pas la combinaison des routes polymorphes et imbriquées. Je ne peux pas garantir cela fonctionnera, mais essayez ceci:

<%= form_for([@commentable, @comment], :url => new_polymorphic_url([@commentable, @comment])) do |f| %> 

Edit: Il vous manque l'initialisation @commentable qui Rishav mentionné, alors essayez d'abord.

0

En outre, je trouve que j'utilise "@commentable = find_commentable" dans chaque méthode de contrôleur de commentaires. Y at-il de toute façon à le déclarer une fois, et permettre à toutes les méthodes de l'avoir?

Questions connexes