我对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| %>
我做错了什么?
答案 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
这应该可以解决您的错误。