2016-01-24 95 views
2

我正在构建一个reddit克隆(仅供练习使用)),并且有一个新评论回复表单的问题。我使用this教程来构建多态注释,并且一切正常,但我希望在答复下添加新评论回复的表单,以便单击链接并显示表单(默认情况下,表单div隐藏)。但是,似乎窗体对于我在窗体中生成的每个新对象都会显示,所以它只是无限循环。是否有任何方式创建评论回复表单?Rails polymorhic评论

这里是我的_form:

= form_for comment do |f| 
    p 
     = f.label :body 
     = f.text_area :body 

     = f.hidden_field :link_id, value: params[:link_id] 

     - if params[:link_id] 
     = hidden_field_tag :link_id, params[:link_id] 
     - if params[:comment_id] 
     = hidden_field_tag :comment_id, params[:comment_id] 

    = f.submit "Create", class: "button tiny" 

而且_comment部分:

li.comment 
    p = comment.body 

    p = link_to "Add a reply", "", class: "reply_link" 
    .comment_form 
    = render 'comments/form', comment: comment.comments.build 

    - unless comment.comments.empty? 
    ul.comments_list 
     = render partial: 'comments/comment', collection: comment.comments 

回答

1

默认CSS因此,解决方案是非常简单的。我不是为每个评论呈现表单,而是比较慢,因此我决定使用AJAX来即时创建表单。 这里的_comment观点:

- if comment.id && comment.user 
    li id="comment-#{comment.id}" class="comment" 
    h6 = "From #{link_to comment.user.email, user_path(comment.user)}".html_safe 
    .comment_body 
     = comment.body 
    = render 'shared/likes_panel', object: comment 
    = link_to "Reply", 
     new_comment_path(comment_id: comment.id), 
     remote: true 
    .comment_form 

    - unless comment.comments.empty? 
     = render 'comments/list', comments: comment.comments 

正如你所看到的,在的link_to我用远程:真,这点在comments_controller 行动应以JS回应:

def new 
    @comment = @parent.comments.new 
    @comment.user = current_user 

    respond_to do |format| 
     format.js 
    end 
    end 

最后,您需要new.js.erb将评论表添加到正确的评论:

var li = $("#comment-<%= params[:comment_id] %>"); 
li.find(".comment_form").html("<%= j render 'comments/form' %>"); 

只要你在<ul>的评论,所有的子注释将很好地缩进!

1

我解决了这个问题,有以下的jQuery。

$(document).ready(function() { 
    $('.partner-area').click(function() { 
     $(this).next('.partner-offices').slideToggle(500); 
    }); 
}); 

如果以上,.partner-area是类的链接的点击,并.partner-offices是我的窗体的类名称。这基本上是说,当点击任何链接时,下一个表单将生成并打开。形式display: hidden

+1

谢谢你,虽然它不是我正在寻找的东西,但你给了我使用ajax渲染表单的想法) – poctek

+0

哦,很高兴听到它!如果您可以发布,我很乐意看到您的解决方案以供我自己的教育使用!谢谢 – RuNpiXelruN

+0

添加答案,希望它会有所帮助) – poctek