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

通过阅读您可能已经收集到的代码,我正在尝试让ancestrygem 使用嵌套资源。我一直在使用 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 回答