2015-02-05 2 views
1
인 댓글을 찾을 수 없습니다.

"댓글"에 "좋아요"를 추가하여 사용자가 댓글을 좋아할 수있게하려고합니다. "like"를 클릭하면이 줄에 Couldn't find Comment with 'id'=이라고 말하는 오류가 발생합니다 : comment = Comment.find params[:comment_id] 내 likes_controller.rb # create에 있습니다.레일 : 'id'=

class CommentsController < ApplicationController 

    def new 
    @discussion = Discussion.find(params[:discussion_id]) 
    @comment = Comment.new 
    end 

    def create 
    @discussion = Discussion.find(params[:discussion_id]) 
    @comment = @discussion.comments.build(comment_params) 
    if @comment.save 
     redirect_to new_discussion_comment_path(@discussion) 
    end 
    end 



    def edit 
    @discussion = Discussion.find(params[:discussion_id]) 
    @comment = @discussion.comments.find(params[:id]) 
    end 

    def update 
    @discussion = Discussion.find(params[:discussion_id]) 
    @comment = @discussion.comments.find(params[:id]) 
    if @comment.update_attributes(comment_params) 
     redirect_to new_discussion_comment_path 
    else 
     render "edit" 
    end 
    end 

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

    private 
    def comment_params 
    params.require(:comment).permit(:id, :description) 
    end 

end 

(댓글)

<%= form_for [@discussion, @comment] do |f| %> 
    <div class="container"> 
    <div class="form-group"> 
     <%= f.label :description %> 
     <%= f.text_area :description, class: "form-control" %> 
    </div> 

    <div class="form-group"> 
     <%= f.submit "Submit comment", class: "btn btn-primary" %> 
    </div> 
    </div> 
<% end %> 

(댓글) edit.html.erb

_form.html.erb comments_controller.rb
class LikesController < ApplicationController 

    def create 
    comment = Comment.find params[:comment_id] 
    like  = comment.likes.new 
    like.user = current_user 
    if like.save 
     redirect_to new_discussion_comment_path, notice: "Liked!" 
    else 
     redirect_to new_discussion_comment_path, alert: "Liked Already!" 
    end 
    end 

    def destroy 
    comment = Comment.find params[:comment_id] 
    like = comment.likes.find params[:id] 
    if like.destroy 
     redirect_to new_discussion_comment_path, notice: "UnLiked!" 
    else 
     redirect_to new_discussion_comment_path, alert: "Can't UnLike!" 
    end 
    end 
end 

likes_controller.rb
<%= render "form" %> 

(댓글) new.html.erb

<div class="container"> 
    <div class="page-header"> 
    <h1>Comments<small> Create a comment.</small></h1> 
    </div> 
</div> 

Discussion: <%= @discussion.title %> <%= link_to "Go back?", projects_path %> 


<%= render "form" %> 


<% if [email protected]? %> 
    <% for item in @discussion.comments %> 
    <div class="container"> 
    <div class="panel panel-default"> 
    <div class="panel-heading"> 
    <%= item.description %> 
    <p> 
     <%= link_to "Edit", edit_discussion_comment_path(@discussion, item) %> 
    </p> 
    <% if user_signed_in? && current_user.has_liked?(item) %> 
    <% like = current_user.likes.find_by_comment_id(item.id) %> 
     <%= link_to "unlike", discussion_like_path(:discussion_id, item), class: "btn btn-info like ", method: :delete %> 
    <% else %> 
     <%= link_to "like", discussion_likes_path(:discussion_id, item), class: "btn btn-info like ", method: :post %> 
    <% end %> 
    </div> 
    </div> 
    </div> 
    <% end %> 
<% end %> 

경로 :

discussion_comments GET /discussions/:discussion_id/comments(.:format)   comments#index 
         POST /discussions/:discussion_id/comments(.:format)   comments#create 
    new_discussion_comment GET /discussions/:discussion_id/comments/new(.:format)  comments#new 
edit_discussion_comment GET /discussions/:discussion_id/comments/:id/edit(.:format) comments#edit 
     discussion_comment GET /discussions/:discussion_id/comments/:id(.:format)  comments#show 
         PATCH /discussions/:discussion_id/comments/:id(.:format)  comments#update 
         PUT /discussions/:discussion_id/comments/:id(.:format)  comments#update 
         DELETE /discussions/:discussion_id/comments/:id(.:format)  comments#destroy 
     discussion_likes GET /discussions/:discussion_id/likes(.:format)    likes#index 
         POST /discussions/:discussion_id/likes(.:format)    likes#create 
    new_discussion_like GET /discussions/:discussion_id/likes/new(.:format)   likes#new 
    edit_discussion_like GET /discussions/:discussion_id/likes/:id/edit(.:format) likes#edit 
     discussion_like GET /discussions/:discussion_id/likes/:id(.:format)   likes#show 
         PATCH /discussions/:discussion_id/likes/:id(.:format)   likes#update 
         PUT /discussions/:discussion_id/likes/:id(.:format)   likes#update 
         DELETE /discussions/:discussion_id/likes/:id(.:format)   likes#destroy 
+2

추가하십시오 수 있습니다 경로는 행동을 – lifus

+0

@lifus 난 그냥 좋아 및 의견에 대한 모든 경로를 추가를 만들 수 있습니다. – roguerat

답변

1

이 조금 드문 일이다

POST /discussions/:discussion_id/likes(.:format) likes#create 

위에서 볼 수 있듯이 :comment_id이 없으므로 쿼리 매개 변수로 전달할 수 있지만 여전히 표준 방법은 아닙니다.여기


이 할 수있는 더 표준 방법 :

POST /discussions/:discussion_id/comments/:comment_id/likes(.:format) likes#create 

을 그리고 당신은 할 수있다 :

discussion_comment_likes_path(@discussion, item) 

하지만이 잘되지 않습니다 중 하나

resources :discussions do 
    resources :comments do 
    resources :likes, only: [:create, :destroy] 
    end 
end 

또한 012 내부에 :discussion_id을 사용하지 마십시오.어쨌든


아직

더 나은 :

POST /comments/:id/likes(.:format) likes#create 

because

자료는 1 개 이상 수준 깊은 중첩해서는 안됩니다.

resources :discussions do 
    resources :comments 
end 

resources :comments do 
    resources :likes, only: [:create, :destroy] 
end 

하고 당신이

comment_likes_path(item) 
0
(댓글)에

new.html.erb 변경 :

<%= link_to "like", discussion_likes_path(:discussion_id, item), class: "btn btn-info like ", method: :post %> 

을에
<%= link_to "like", discussion_likes_path(:discussion_id, item.id), class: "btn btn-info like ", method: :post %> 
+0

그리고 "싫어하는"링크에도 똑같이 적용해야합니다. –

+0

흠, 당신이 바꾼 것은 모두 .id 마지막에요? 나는 .id가 필요하다고 생각하지 않습니다. 아무것도 바뀌지 않았다. – roguerat

+0

예, 필요하지만 다른 오류가 있습니다. 댓글에 좋아하는 사람들을위한 전용 경로가 필요합니다.이 경로에는 'comment_id'매개 변수가 포함되어야합니다. 예 : discussion_comments_likes POST /discussions/:discussion_id/:comment_id/likes(.:format) –

0

당신이 좋아하는 컨트롤러에 넘겨주는 매개 변수를 참조하지 않는다고 문제가 있다고 생각합니다.

당신은 변경하여 likes_controller.rb에 해시로 의견을 전달하는 시도 할 수 있습니다 :

<%= link_to "like", discussion_likes_path(:discussion_id, item), class: "btn btn-info like ", method: :post %> 

당신 (댓글) new.html.erb에서

<%= link_to "like", discussion_likes_path(:discussion_id, :comment_id => item.id), class: "btn btn-info like ", method: :post %> 

에이 새로운를 참조 와 likes_controller.rb의 매개 변수 :

comment = Comment.find params[:comment_id] 
+0

이것을 시도했지만 LikesController : Class' 오류에 대해 '정의되지 않은 지역 변수 또는 메소드'params '가 표시됩니다. [: 코멘트] 여기서 정확히 당신이'주석 =의 PARAMS를 넣어 않았다'추가 – roguerat

+0

봅니다 : 나는 여전히 같은 오류가 발생하여 likes_controller.rb – challett

+0

에 end' : (코멘트) '개인 데프 params.permit을 like_params. – roguerat