在Ruby on Rails 4中Ajaxify评论发布和回复?

时间:2016-01-09 11:21:14

标签: jquery ruby-on-rails ruby ajax ruby-on-rails-4

我对Ruby on rails或编码很新。我一直在关注this tutorial使用act-as-commentable-with-threading-gem在我的Ruby on rails web应用程序上构建一个评论系统。

我正在尝试ajaxify“发布”和“回复”操作,以便新注释可以附加到页面而无需重新加载。但它会导致以下错误:

"ActionView::MissingTemplate - Missing partial comments/_comment with {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :jbuilder]}."

我一直试图弄清楚这一点但到目前为止没有运气。 我已经修改了注释控制器的“def create”部分,如下所示:

def create
  commentable = commentable_type.constantize.find(commentable_id)
  @comment = Comment.build_from(commentable, current_user.id, body)
  @comments = Comment.where(commentable_id: commentable_id)

  respond_to do |format|
   if @comment.save
     make_child_comment
     format.html { redirect_to(:back) }
     format.js
   else
     format.html { render :action => "new" }
     format.js
   end
  end
end

并使用以下代码创建了views / comments / create.js.erb文件:

$('.comments-container').prepend("<%= j render @comments %>");

当然修改了表单中的表单操作以及回复模板以响应异步请求:

_reply.html.erb line:7

<%= form_for @new_comment, remote: true do |f| %>

_form.html.erb line:1

<%= form_for @new_comment, remote: true do |f| %>

我做错了什么?

1 个答案:

答案 0 :(得分:0)

既然你是新手,我会给你一些信息,虽然我之前没有使用acts-as-commentable-with-threading

  

ActionView :: MissingTemplate - 缺少部分评论/ _comment

错误基本上意味着您没有app/views/comments/_comment.html.erb partial

问题在于:

<%= j render @comments %>

-

根据docs

  

当使用复数集合调用partial时,partial的各个实例可以访问通过以partial命名的变量呈现的集合的成员。在这种情况下,部分为_product,在_product部分内,您可以引用product来获取正在呈现的实例。

这意味着如果您正在调用render @comments,Rails将会查找_comment.html.erb部分内容。因为找不到它,所以会出现错误。

修复方法是将您的评论代码移动到部分代码中,并使用它来填充您的comments

#app/views/comments/show.html.erb
<%= render @comment %>

#app/views/comments/_comment.html.erb
<%= comment.title %> #-> put your comment code here

这应该可以解决您的错误。