0

Ryan Batesのスクリーンキャストをフォローしようとしていますが、エラーメッセージが表示されます。私は次のことをしました:

1)テーブルを作成する

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

2)セットアップモデル

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)コントローラーの表示アクションを変更します

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

4)テンプレートviews / category/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)その後、/ category/my-category-permalinkにアクセスしてエラーメッセージが表示されます

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

私が間違ったことを理解するのを手伝ってくれませんか。元のスクリーンキャストでは、ライアンはネストされた関連付けを使用して/ category / permalink / reviewsによってコメントにアクセスしますが、私はそれを必要としません。ポリモーフィックオブジェクトから直接コメントを書きたい。ありがとう

4

1 に答える 1

1

問題はルート設定にありました。ネストされたリソースを使用しないため、ルートを変更せずに維持できると考えました。さて、今私は私が間違っていたことを知っています... :) これを追加して問題を解決してください:

map.resources :categories :has_many => :comments
map.resources :products, :has_many => :comments
于 2009-09-26T23:22:14.773 に答える