在我的项目中,我会在帖子上显示最后4条评论,然后当有人点击展开评论链接时,其他评论应显示。我有以下代码
<%= 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")
respond_to do |format|
format.js{}
end
end
现在我需要帮助的是,当调用展开评论操作时,我想发送我现在显示的帖子ID和最后一个评论ID。
答案 0 :(得分: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参数,将其存储为data-attribute:
<%= 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中删除“remote:true”。
链接点击时发送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 %>');