Создание блога ruby ​​на Rails - проблема удаления комментариев - PullRequest
9 голосов
/ 12 апреля 2010

Поскольку я всегда печатаю, я новичок в рельсах и программировании в целом, так что будь проще. Заранее спасибо.

Я успешно выполнил первоначальный урок от Райана Бейтса о , как создать блог за 15 минут . Если вы не знаете, этот учебник проведет вас через создание постов и предоставление комментариев к этим постам. Он даже вводит AJAX через создание и отображение комментариев на странице posts.html.erb. Все отлично работает.

Вот икота, когда Райан берет вас через это руководство, он очищает comments_controller и показывает только код для создания комментариев. Я пытаюсь добавить обратно возможность редактировать и уничтожать комментарии. Не могу заставить его работать, продолжает удалять фактическое сообщение, а не комментарий (журнал показывает, что я продолжаю отправлять запрос DELETE в PostsController). Вот мой код:

class CommentsController < ApplicationController
 def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.create!(params[:comment])
   respond_to do |format|
     format.html { redirect_to @post }
     format.js
   end
 end

 def destroy
    @comment = Comment.find(params[:id])
    @comment.destroy

    respond_to do |format|
      format.html { redirect_to(posts_url) }
      format.xml  { head :ok }
    end
  end
end

/ просмотров / сообщений / show.html.erb

    <%= render :partial => @post %>

    <p>
        <%= link_to 'Edit', edit_post_path (@post) %> |
        <%= link_to 'Destroy', @post, :method => :delete, :confirm => "Are you sure?" %> |
        <%= link_to 'See All Posts', posts_path %>
    </p> 

    <h2>Comments</h2>
    <div id="comments">
        <%= render :partial => @post.comments %>
    </div>

    <% remote_form_for [@post, Comment.new] do |f| %>
        <p>
            <%= f.label :body, "New Comment" %><br/>
            <%= f.text_area :body %>
        </p>
        <p>

<%= f.submit "Add Comment" %></p>
<% end %>

/ мнения / комментарии / _comment.html.erb

<% div_for comment do %>
    <p>
        <strong>Posted <%= time_ago_in_words(comment.created_at) %> ago
        </strong><br/>
        <%= h(comment.body) %><br/>
        <%= link_to 'Destroy', @comments, :method => :delete, :confirm => "Are you sure?" %>
    </p>
<% end %>

routes.rb

ActionController::Routing::Routes.draw do |map|
  map.resources :posts, :has_many => :comments
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

Ответы [ 2 ]

12 голосов
/ 12 апреля 2010

Meagar находится на правильном пути, но так как это вложенный маршрут, вы должны сделать:

<%= link_to 'Destroy', [@post, comment], ... %>

Итак, вы передаете комментарий и сообщение и позволяете рельсам определить маршрут на основе ваших определений.

1 голос
/ 12 апреля 2010

В _comments.html.erb измените link_to на

<%= link_to 'Destroy', comment, ... %>

IE, передайте ему comment, а не весь массив @comments.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...