限制向用户显示的评论数量的好方法是什么,直到他们选择查看全部?

时间:2012-04-16 12:32:09

标签: javascript jquery ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

目前,模板中的每个循环都显示注释的位置。假设用户对他们发布的微博有50条评论。将显示一个显示50条评论的长列表。

为了节省页面空间,我决定将每个微博的评论限制为2-3。如果用户希望查看更多内容,可以单击“查看更多”或“查看全部”。我想知道服务器如何应对如果有10,000条评论和用户点击“查看全部”这就是为什么我可以选择实施“查看更多”然后再显示50条评论“

无论如何,我想知道一种很好的方法来限制向用户显示的评论数量,直到他们选择查看全部内容?

如果我去了jquery / js路由并且这样做只有2-3条最新消息被显示,其他消息仍然被加载回来结束它们不会因此不是更好的选择来控制它ruby on rails有些怎么样?

我真的很喜欢一些很好的解决方案/信息来实现这一目标。

您需要的任何其他信息我很乐意提供。

由于 亲切的问候

3 个答案:

答案 0 :(得分:2)

你可以像Facebook一样:

  • 仅显示2/3条评论。仅从后端加载2/3条评论。
  • 当用户点击“显示更多”时,会显示50个以上。它通过AJAX加载它们。因此,在后端,您只会收到“除了三个以上之外获得50条评论”的请求。
  • 显示另一个“显示更多”链接。它将加载50个其他评论,除了53个第一。

在Facebook上,您不能同时加载超过50条评论。我想你也应该这样做。

答案 1 :(得分:0)

干净的方法是为评论实施分页。

答案 2 :(得分:0)

我认为belongs_tohas_many之间存在简单的PostComment关系。我通常会这样做:

路线:

resources :posts do
  resources :comments
end

模型:设置默认页面大小:

class Comments < ActiveRecord::Base
  belongs_to :post

  DEFAULT_PAGE_SIZE = 25
end

控制器:

class CommentsController
  def index
    post = Post.find(params[:post_id])
    offset = params[:offset] || 0
    limit = params[:limit] || Comment::DEFAULT_PAGE_SIZE
    @comments = post.comments.offset(offset).limit(limit)

    respond_to do |format|
      #respond as you like
    end
  end

  # more actions...
end

查看,加载更多链接,通过ajax加载评论:

<%= link_to "load more comments", post_comments_path(@post, :format => 'js'), :method => :get, :remote=>true id='load-more-comments' %>

并且您还想将偏移量绑定到ajax帖子:

$ ->
  $('#load-more-comments').on 'ajax:before', (event) ->
    el = $(this)
    offset = #count your offset, I often do by counting the <li>s already in the <ul>
    el.data 'params', "offset=#{offset}"
    # you could also pass the limit: el.data 'params', "offset=#{offset}&limit=#{some limit}"
  .on 'ajax:complete', (event, xhr, status) ->
    el = $(this)
    el.removeData 'params' # remember to remove this.

我也对更好的方法感兴趣。期待着答案和批评。 :)