如何让评论作者编辑,更新和更新摧毁他们?

时间:2016-05-11 11:42:29

标签: ruby-on-rails ruby comments userid

我试图阻止所有用户编辑,更新和销毁我论坛中帖子的评论。我设法阻止所有用户编辑帖子,但我无法解决我需要做的事情,以防止所有用户编辑评论。

我在post控制器中解决了post_action的帖子问题:

before_action :post_owner, only: [:edit, :update, :destroy]

这是我的show.html.haml:

#post_content

%h1= @post.title
%p= @post.content

#comments
    %h2
        = @post.comments.count
        Comments
    = render @post.comments

    - if user_signed_in?

        %h3 Reply to thread
        = render'comments/form'

        %br/
        %hr/
        %br

        - if @post.user_id == current_user.id
            = link_to "Edit", edit_post_path(@post), class: "button"
            = link_to "Delete", post_path(@post), method: :delete, data: { confirm: "Are you sure you want to do this?"}, class: "button"

我在post_controller中为评论添加了一个before_action,并在_comment.html.haml中尝试了这个:

.comment.clearfix
.content
    %p.comment_content= comment.comment
    %p.comment_author= comment.user.email

%br/
%br/
%br/
%br/

- if @comment.user_id == current_user.id

    = link_to "Edit", edit_post_comment_path(comment.post, comment), class: "button"

    = link_to "Delete", [comment.post, comment], method: :delete, data: { confirm: "Are you sure?"}, class: "button"

但是我收到以下错误:

undefined method `user_id' for nil:NilClass

我认为这是一个简单的解决方案,但我还没有体验过ruby on rails。

2 个答案:

答案 0 :(得分:0)

你得到这个nil:NilClass错误,因为你获得了实例变量@comment nil,所以这就是为什么你没有从@comment获得user_id并得到这个错误。

因此,将 @comment 变量更改为评论,您将获得user_id。

答案 1 :(得分:0)

在_comment.html.haml中,您使用的是@comment,可能未在任何地方声明。将其更改为comment应解决问题

- if comment.user_id == current_user.id