2014-02-10 21 views
0

在我的項目中,我顯示了一篇文章的最後4條評論,然後當有人點擊展開評論鏈接時,其餘評論應該顯示。我有以下代碼部分渲染和調用之間的變量在rails中調用

<%= link_to demo_expand_comments_path(:post_id => post.id, comment_id => comment_id), remote: true do %> 
    This is the link to expand comment. 


<div id="comments_container_<%= post.id %>"> 
      <%= render :partial => 'community/comments/comment_box_posts', :collection => post.comments.order('id DESC').limit(4).reverse, :as => :comment %> 
     </div> 

在這裏,我第一次呈現4條評論

現在,當有人點擊展開評論,expand_comments動作叫和expand_comment.js.erb有以下代碼

$('#comments_container_<%= @post_id %>').prepend('<%= escape_javascript(render :partial => 'community/comments/comment_box_posts', :collection => @comments, :as => :comment) %>'); 

控制器動作

def expand_comments 
    @post_id = params[:post_id] 
    post = Post.find(params[:post_id]) 
    @comments = post.comments.where('id < ?', params[:comment_id]).order("created_at ASC") 

我需要最後顯示的comme nt_id這裏

respond_to do |format| 
     format.js{} 
    end 

    end 

現在我需要幫助的是,當展開評論行動被稱爲我想發送帖子ID和我現在顯示的最後一個評論ID。

回答

0

有幾種方法可以做到這一點。您可以更改「擴展評論」鏈接以及您提交評論。

在控制器:

def expand_comments 
    ... 
    @comment_id = @comments.last.id 

然後在expand_comment.js.erb:

$('#comments_container_<%= @post_id %>').prepend('<%= escape_javascript(render :partial => 'community/comments/comment_box_posts', :collection => @comments, :as => :comment) %>'); 
$('#id_of_link').attr('href', '<%= demo_expand_comments_path(:post_id => @post_id, comment_id => @comment_id) %>'); 

但它不是辦法,我喜歡。

不要發送類似url參數的comment_id參數。您應該通過ajax請求發送它。

從URL刪除COMMENT_ID參數,其存儲像數據屬性:

<%= link_to demo_expand_comments_path(:post_id => post.id), data: {comment_id: @comment_id} do %> 
This is the link to expand comment. 
... 

請注意,您必須刪除「遠程:真正的」從過的link_to。

發送Ajax請求時,鏈接點擊:

$('#id_of_link').click(function() { 
    $.ajax({ 
    type: "get", 
    url: $(this).attr('href), 
    data: { comment_id: $(this).data('comment_id') }, 
    dataType: 'script' 
    }); 
    return false; 
}); 

而且更新COMMENT_ID屬性時評論渲染:

$('#comments_container_<%= @post_id %>').prepend('<%= escape_javascript(render :partial => 'community/comments/comment_box_posts', :collection => @comments, :as => :comment) %>'); 
$('#id_of_link').data('comment_id', '<%= @comment_id %>'); 
+0

'@comment_id = @ comments.last.id' 這將讓最後一個註釋ID從數據庫,但我需要我已經顯示或在該職位下呈現的最後評論ID – asdfkjasdfjk

+0

你是對的。您必須在控制器上添加正確的*限制*和*訂單*條件) – chumakoff