我希望有一个下一个和上一个链接,这个链接突出了下一篇和上一篇文章

时间:2012-02-21 22:56:57

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 pagination will-paginate

在一个简单的博客应用程序中,有人可以阅读文章并决定阅读下一篇文章,而无需再次浏览文章列表,但单击下一个按钮,它会将此人带到此列表中的下一篇文章。如何才能做到这一点。我曾与willpaginate和kaminari合作,他们都是很好的分页插件。

所以现在在节目动作中我希望有一个下一个和上一个链接,这个链接在下一篇和上一篇文章中如何做到这一点

下面的简单代码示例与

一起使用
def show
  @article = Article.find(params[:id])
end

2 个答案:

答案 0 :(得分:1)

您可以向Article添加一个方法,以获取下一篇和之前的文章,具体取决于您对下一页和之前的内容 - 即您希望文章的顺序。

E.g。用created_at来定义订单

def next
  self.class.find(
    :first, 
    :conditions => ["created_at > ?", self.created_at], 
    :order => 'created_at, id')
end

def previous
  self.class.find(
    :first, 
    :conditions => ["created_at < ?, self.created_at],
    :order => 'created_at desc, id desc')

假设在日期没有创建相同的东西,这可能有点过于简单,所以你也可能想要检查id。类似的东西:

    :conditions => ["created_at > ? or (created_at = ? and id > ?)", self.created_at, self.created_at, self.id]

如果你只是想通过id订购那么它就更加微不足道,因为它们永远不会是相同的:

def next
  self.class.find(:first,
    :conditions => ['id > ?', self.id],
    :order => 'id')
end

def previous
  self.class.find(:first,
    :conditions => ['id < ?', self.id],
    :order => 'id desc')
end

答案 1 :(得分:0)

您可以使用Willpaginate插件解决您的问题。 https://github.com/mislav/will_paginate