【问题标题】:Ajaxify comment posting and replies in Ruby on Rails 4?Ruby on Rails 4 中的 Ajaxify 评论发布和回复?
【发布时间】:2016-01-09 11:21:13
【问题描述】:

我对 Ruby on rails 或一般编码相当陌生。我一直在关注this tutorial,使用acts-as-commentable-with-threading-gem 在我的Ruby on rails web 应用程序上构建评论系统。

我正在尝试对“发布”和“回复”操作进行 ajaxify 处理,以便将新的 cmets 附加到页面而无需重新加载。但它会导致以下错误:

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

我一直在尝试解决这个问题,但到目前为止还没有运气。 我已将 cmets 控制器的“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/cmets/create.js.erb 文件:

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

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

_reply.html.erb 行:7

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

_form.html.erb 行:1

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    既然你是新人,我会给你一些信息,虽然我以前没有用过acts-as-commentable-with-threading。


    ActionView::MissingTemplate - 缺少部分 cmets/_comment

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

    问题出在这里:

    <%= j render @comments %>
    

    --

    根据docs:

    当使用复数集合调用分部时,分部的各个实例可以通过以分部命名的变量访问正在呈现的集合的成员。在这种情况下,partial 为_product,在_product partial 内,您可以参考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
    

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

    【讨论】:

    • @Rick Peck 感谢 peck 先生,这很有魅力。虽然现在我遇到了另一个错误。应用程序上的 cmets 已发布,但在页面刷新之前不可见。这是我得到的错误:ArgumentError - 表单中的第一个参数不能包含 nil 或为空:actionview (4.2.0) lib/action_view/helpers/form_helper.rb:432:in form_for' app/views/comments/_comment.html.erb:20:in block in _app_views_cmets__comment_html_erb___265496053_64199412' C:0:在each' app/views/comments/_comment.html.erb:2:in _app_views_cmets__comment_html_erb___265496053_64199412'
    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 2012-11-07
    • 2015-11-14
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多