Curd on nested resources(the comments resource in rails user guide exmaple)

Hi:

I am following the rails 3 user guide,the blog application.

And I want to make the comment resources editable(and both the
create/update form will be displayed in the post/show page),so I try to
make the following modifiation(the core):

CommentController.rb:
class CommentsController < ApplicationController
def edit
@post=Post.find(params[:post_id])
@comments=Comment.all
@comment = Comment.find(params[:id])
render “/posts/show”
end

def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to post_path @post, notice: ‘Comment was
successfully saved.’ }
format.json { head :no_content }
else
format.html { render “posts/show” }
format.json { render json: @comment.errors, status:
:unprocessable_entity }
end
end
end

def update
@post=Post.find(params[:post_id])
@comment = Comment.find(params[:id])
respond_to do |format|
if @comment.update_attributes(params[:comment])
format.html { redirect_to post_path(@post), notice: ‘Comment was
successfully updated.’ }
format.json { head :no_content }
else
format.html { render “posts/show” }
format.json { render json: @comment.errors, status:
:unprocessable_entity }
end
end
end
end

post/show.erb.html:

<h2>Comments</h2>
<% @post.comments.each do |comment| %>
<tr>
    <td><%= comment.commenter %></td>
    <td><%= comment.body %></td>
    <td><%= link_to 'Edit', edit_post_comment_path(@post,comment)

%>

<%= link_to ‘Destroy’, post_comment_path(@post,comment),
confirm: ‘Are you sure?’, method: :delete %>

<% end %>

Add a comment:

<%= form_for([@post,@comment]) do |f| %> <% if @comment.errors.any? %>

<%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:

<ul>
    <% @comment.errors.full_messages.each do |msg| %>
    <li>
        <%= msg %>
    </li>
    <% end %>
</ul>
<% end %>
<%= f.label :commenter %>
<%= f.text_field :commenter %>
<%= f.label :body %>
<%= f.text_area :body %>
<%= f.submit %>
<% end %>

routes.rb
resources :posts do
resources :comments
end

The above codes seems work at first,since I can CURD for posts and the
nested comments.

However when I create a new comment,if there was any errors in the user
input(for example minimum requirement),I will meet the error:

No route matches {:action=>“edit”, :controller=>“comments” …

When I remove the lines:

<%= link_to ‘Edit’, edit_post_comment_path(@post,comment)
%>
<%= link_to ‘Destroy’, post_comment_path(@post,comment),
confirm: ‘Are you sure?’, method: :delete %>
It will pass, and this error will not occur when I update a comment.

So I wonder why?

BTW,I am afraid I can not express clearly,so I upload the source codes,I
hope someone can do me a favor and check it. Thanks.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs