尝试通过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,因为什么和错误。
答案 0 :(得分:0)
您需要处理匿名访问中的特殊情况(可能是评论模板)。因此current_chef
将为零。所以你在视图和控制器中使用它,正确处理它。
提示:您不需要将current_chef
实际分配给任何实例变量。它已经是一种帮助方法了。您可以直接从视图中调用它。