Tree评论Ruby on Rails

时间:2016-01-06 15:51:56

标签: ruby-on-rails ruby devise

尝试通过gem在网站上实现树状评论 - act-as-commentable-with-threading

评论非常好,当我访问用户下的网站(通过gem 设计实施)时,网站上会显示评论。

但是当我试图匿名查看页面时,我自然会收到一个错误,即错误可能是因为这些元素是空白的。

这是我的控制器 recipes_controller.rb

class RecipesController < ApplicationController
    before_action :authenticate_chef!, except: [:index, :show]
    def show
        @recipe = Recipe.find(params[:id])
        @comments = @recipe.comment_threads.order('created_at desc')
        @user_who_commented = current_chef
        @new_comment = Comment.build_from(@recipe, @user_who_commented.id, "")
    end
...

comments_controller.rb

class CommentsController < ApplicationController  
  before_action :authenticate_chef!

  def create
    commentable = commentable_type.constantize.find(commentable_id)
    @user_who_commented = current_chef
    @comment = Comment.build_from(commentable, @user_who_commented.id, body)

    respond_to do |format|
      if @comment.save
        make_child_comment
        format.html  { redirect_to(:back, :notice => 'Comment was successfully added.') }
      else
        format.html  { render :action => "new" }
      end
    end
  end
...

recipe.rb

class Recipe < ActiveRecord::Base
    acts_as_commentable
...

在视图中( recipes / show.html.erb )我把这个渲染:

<%= render partial: "comments/template", locals: {commentable: @recipe, new_comment: @comment} %>

我认为您可能需要在控制器中为那些只浏览网站的人创建类似于设计 if ... else 的内容,因为show方法中此时的默认设置已设置current_chef,因为什么和错误。

1 个答案:

答案 0 :(得分:0)

您需要处理匿名访问中的特殊情况(可能是评论模板)。因此current_chef将为零。所以你在视图和控制器中使用它,正确处理它。

提示:您不需要将current_chef实际分配给任何实例变量。它已经是一种帮助方法了。您可以直接从视图中调用它。