Error:
No route matches {:action=>"new", :controller=>"comments", :parent_id=>1}
routes.rb:
MyApp::Application.routes.draw do
resources :posts do
resources :comments
end
resources :topics do
resources :posts
end
root :to => "posts#index"
end
models:
class Topic < ActiveRecord::Base
has_many :posts, :dependent => :des开发者_运维知识库troy
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
view:
<%= link_to "Reply", new_post_comment_path(@post, :parent_id => comment.id) %>
controller:
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
By reading the code you might have gathered that I am trying to get the ancestry
gem to work with nested resources. I've been using the Railscasts episode on the Ancestry gem to guide me. Thanks for reading my question.
Try to pass comment id
link_to "Reply", new_post_comment_path(@post, :parent_id => comment.id).
You need to use the nested path: link_to "Reply", new_post_comment_path(@post, :parent_id => comment)
.
rake routes
can be your friend.
精彩评论