2016-01-24 82 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