2009-09-26 10 views
0

J'essaie de suivre Ryan Bates screencast mais j'ai un message d'erreur. Je l'ai fait ce qui suit:Problème avec l'association polymorphe dans Rails

1) Créer la table

class CreateComments < ActiveRecord::Migration 
    def self.up 
    create_table :comments do |t| 
     t.references :commentable, :polymorphic => true 

2) modèles de configuration

class Comment < ActiveRecord::Base 
    belongs_to :commentable, :polymorphic => true 

class Product < ActiveRecord::Base 
    has_and_belongs_to_many :categories 
    has_many :comments, :as => :commentable 

class Category < ActiveRecord::Base 
    has_and_belongs_to_many :products 
    has_many :comments, :as => :commentable 

3) contrôleur de changement show d'action

class CategoriesController < ApplicationController 
    def show 
    @category = Category.find_by_permalink(params[:id]) 
    @commentable = @category 
    @comment = Comment.new(:commentable => @category) 
    end 

4) Ajouter un formulaire modèle vues/catégories/show.html.erb

<% form_for [@commentable, Comment.new] do |f| %> 
    <p> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </p> 
    <p> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </p> 
    <p> 
    <%= f.submit 'Submit' %> 
    </p> 
<% end %> 

5) Après que je reçois un message d'erreur en accédant à/catégories/my-catégorie permalien

NoMethodError in Categories#show 
undefined method `category_comments_path' for #<ActionView::Base:0x69a9254> 

Pourriez-vous me aider à comprendre ce que je fait de mal? Dans le screencast original, Ryan accède aux commentaires par/categories/permalink/comments en utilisant des associations imbriquées, mais je n'en ai pas besoin. Je veux écrire des commentaires directement à partir de mes objets polymorphes. Merci

+0

Sur la page screencast, Val a posté un lien vers le code démo a corrigé: 59. Val 25 août , 2009 at 10:02 J'ai corrigé tous les bugs et le code de travail que vous pouvez télécharger de www.rubyf.info/files/polimorphic_work0.zip – Andrei

Répondre

1

Le problème résidait dans les paramètres des itinéraires. Je pensais que puisque je n'utilise pas de ressources imbriquées, je peux garder les routes inchangées. Eh bien, maintenant, je sais que je me suis trompé ... :) Ajouter ce pour résoudre le problème:

map.resources :categories :has_many => :comments 
map.resources :products, :has_many => :comments 
Questions connexes