2012-02-15 98 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?

**還沒有嘗試的代碼,但應該工作