2017-07-17 8 views
-1

J'essaie de créer un blog simple avec des rails 5.Mon application a un poste, utilisateur, catégorie et modèle de commentaire.Tout fonctionne bien, sauf que je ne peux pas le faire fonctionner le modifier et détruisez l'action pour les commentaires.
Voici les contrôleurs Revelantlink_to détruire l'action ne fonctionne pas pour les ressources imbriquées

de comments_controller.rb

Class CommentsController < ApplicationController 

def new 
    @comment=Comment.new 
    @post=Post.find(params[:post_id]) 
end 

def create 
    @post=Post.find(params[:post_id]) 
    @comment=Comment.new(params.require(:comment).permit(:body)) 
    @comment.user_id=current_user.id 
    @[email protected] 
    if @comment.save 
     redirect_to(post_path(@post)) 
    else 
     render('new') 
    end 
end 


def edit 
    @post=Post.find(params[:post_id]) 
end 

def update 

end 

def destroy 
    @post=Post.where(id: params[:post_id]) 
    @comment=Comment.where(post_id: params[:post_id],id: params[:id]) 
    @comment.destroy(params[:post_id]) 
    redirect_to(post_path(@post)) 
end 
end 

posts_controller.rb

class PostsController < ApplicationController 
before_action(:post_find,only: [:show,:edit,:update,:destroy]) 
before_action(:authenticate_user!,except: [:index,:show]) 
before_action(:owner?,only: [:edit,:update,:destroy]) 
before_action(:find_categories,only: [:new,:create,:edit,:update]) 
def index 
    if params[:category].blank? 
     @posts=Post.all 
    else 
     @category_id=Category.find_by(name: params[:category]).id 
     @posts=Post.all.where(category_id: "#{@category_id}").order("created_at DESC") 
    end 
end 

def new 
    @post=Post.new 
end 

def create 
    @post=Post.new(post_params) 
    @post.user_id=current_user.id 
    @post.category_id=params[:category_id] 
    if @post.save 
     redirect_to(root_path) 
    else 
     render('new') 
    end 
end 

def show 
end 

def edit 
end 

def update 
    @post.category_id=params[:category_id] 
    if @post.update(post_params) 
     redirect_to(post_path(@post)) 
    else 
     render('edit') 
    end 
end 

def destroy 
    @post.destroy 
    redirect_to(posts_path) 
end 

private 
    def post_params 
     params.require(:post).permit(:title,:body,:category,:category_id) 
    end 

    def post_find 
     @post=Post.find(params[:id]) 
    end 

    def owner? 
     if user_signed_in? 
      if @post.user.id!=current_user.id 
       redirect_to(root_path) 
      end 
     end 
    end 

    def find_categories 
     @categories=Category.all.map{|c| [c.name,c.id]} 
    end 
end 

messages/show.html.erb (partie revelant)

<h4> 
Comments 
<% if user_signed_in? %> 
    | <%= link_to("New comment",new_post_comment_path(@post)) %> 
<% end %> 
</h4> 
<ul> 
<% @post.comments.each do |f| %> 
    <li> 
     <%= f.body %> | 
     by <%= f.user.email %> | 
     <%= link_to("Delete",post_comment_path(f),method: :delete) %> 
    </li> 
<% end %> 
</ul> 

Des idées ce que je fais mal?

+0

Avez-vous une erreur? – Pavan

+0

ce qui est l'erreur et s'il vous plaît publier des itinéraires pour commenter et publier ainsi –

+0

itinéraires: Rails.application.routes.draw faire devise_for (: utilisateurs) \t ressources (messages): faire \t \t ressources (: commentaires) \t fin \t racine (à: "messages # index") fin –

Répondre

0

utilisez nested_scaffold gen pour une autre application de test ... à partir de là, vous pouvez avoir une idée des ressources imbriquées.

1

Vous passez comment_id à la place de post_id et vous n'êtes pas de passage post_id dans le post_comment_path lien.

Essayez de changer le link_toSupprimer action ci-dessous:

<%= link_to("Delete",post_comment_path(@post, f),method: :delete) %> 

Et, comme vous avez déjà le commentaire à détruire, enlever la params[:post_id] de détruire la fonction comme ci-dessous:

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

En savoir plus sur les routeurs et les aides URL: http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects

+0

Im obtenir le mauvais nombre d'arguments (0 pour 1) dans la ligne @ comment.destroy –

+0

Mis à jour la réponse. –