2012-02-15 158 views
0

我有我的所有文章的列表,按客户名称排序。Next前一篇文章基于订单

articles_controller.rb - 指数

@articles = Article.order('client') 

在我的节目页面,如何获取的顺序下一个和以前的文章?

回答

0

如果你已经有了文章的演出行动,你可以使用“指数”,以获得本文中的阵列由“Article.order返回的位置(“客户”)的所有“

不知怎的,像这样:

@article = Article.find(params[:id]) 
@article_list = Article.order(:client).all 
index = @article_list.index(@article) 

在此基础上可以计算出一个和下一个文章很简单。不知道这是否是最聪明的解决方案,但它应该工作。

+0

看起来不错 - 谢谢。我想你的第三行意思是'index = @ article_list.index(@article)'? – Edward 2012-02-15 16:37:52

+0

是的,当然。对不起,错字。更正:)并可能是@index如果你想在你的视图中使用 – 2012-02-15 17:03:33

+0

而'next = @article_list [index + 1]'谢谢 - 那太好了。 – Edward 2012-02-16 16:40:17

0

在你的模型中的两个作用域

class Article < ActiveRecord::Base 
    scope :order_by_id, lambda { 
    {:order => "id desc"} 
    } 

    scope :order_by_client, lambda {|client_id| 
    {:order => "client_id desc"} 
    } 

end 

@articles = Article.order_by_client(1).order_by_id 

与验证,你可以做类似

下一篇文章(说当前文章指数是1)

@articles(curr ent_index + 1)除非@articles(current_index + 1).nil?

以前的文章(说当前文章指数是2)

@articles(CURRENT_INDEX - 1)除非@articles(CURRENT_INDEX - 1).nil?

**还没有尝试的代码,但应该工作