0

エラー:

No route matches {:action=>"new", :controller=>"comments", :parent_id=>1}

ルート.rb:

MyApp::Application.routes.draw do
  resources :posts do
    resources :comments
  end
  resources :topics do
    resources :posts
  end
  root :to => "posts#index"
end

モデル:

class Topic < ActiveRecord::Base
  has_many        :posts, :dependent => :destroy
  attr_accessible :name, :post_id
end

class Post < ActiveRecord::Base
  belongs_to :topic,    :touch => true
  has_many   :comments, :dependent => :destroy
  accepts_nested_attributes_for :topic
  attr_accessible :name, :title, :content, :topic, :topic_attributes
end

class Comment < ActiveRecord::Base
  has_ancestry
  attr_accessible :name, :content
  belongs_to      :post, :touch => true
end

見る:

<%= link_to "Reply", new_post_comment_path(@post, :parent_id => comment.id) %> 

コントローラ:

class CommentsController < ApplicationController
  respond_to :html, :xml
  def show
    @post = Post.find(params[:id])
    @comments = @post.comments.order("updated_at").page(params[:page])
  end

  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
    if @comment.save
      flash[:notice] = "Replied to \"#{@post.title}\""
      redirect_to(@post)
    else
      flash[:notice] = "Reply failed to save."
      redirect_to(@post)
    end
  end

  def new
    @post = Post.find(params[:post_id])
    @comment = Comment.new(:parent_id => params[:parent_id]) 
    # @comment = @post.comments.build
  end

  def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)
  end
end

ancestryコードを読むことで、私がgemをネストされたリソースで動作させようとしていることがわかったかもしれません。私は祖先の宝石のRailscastsエピソードを使って私を導いてきました。私の質問を読んでくれてありがとう。

4

2 に答える 2

1

コメントIDを渡してみてください

link_to "Reply", new_post_comment_path(@post, :parent_id => comment.id).
于 2011-05-12T14:43:26.300 に答える
0

ネストされたパスを使用する必要があります:link_to "Reply", new_post_comment_path(@post, :parent_id => comment)

rake routesあなたの友達になることができます。

于 2011-05-11T04:01:35.587 に答える