2013-11-05 22 views
6

如果您訪問http://ccvideofinder.heroku.com/,這是我指的是一個很好的例子。如何在Rails中按字母順序排序電影?

這怎麼能在Rails中完成?我想也許使用case/when聲明,但在與IRB混了一段時間後,我無法弄清楚。


在模型:

class Movies < ActiveRecord::Base 
    validates_presence_of :title 

    def self.find_by_first_letter(letter) 
    find(:all, :conditions => ['title LIKE ?', "#{letter}%"], :order => 'title ASC') 
    end 

end 

在控制器:

@result = Movie.find_by_first_letter(params[:letter]) 
+0

'movies.sort'? – numbers1311407

+0

http://guides.rubyonrails.org/active_record_querying.html#ordering –

+0

這就像他在信中存儲電影一樣。a = ['ant life','another one'],b = ['boiler room'] - 這就是讓我困惑的原因。 –

回答

14
# Simple Ordering  
@videos = Movie.order('title ASC') 

# Implement the ordering outside of definition 
@videos = Movie.find_by_first_letter('a').order('title ASC') 

# Implement the order into your definition (as in example below) 
@videos = Movie.find_by_first_letter('a') 

ActiveRecord的查詢文檔可以發現: http://guides.rubyonrails.org/active_record_querying.html#ordering


如果要執行的命令到您的find_by_first_letter定義,那麼你可以簡單地鏈.order()功能如下:

class Movie < ActiveRecord::Base 
    validates_presence_of :title 

    def self.find_by_first_letter(letter) 
    where('title LIKE ?', "#{letter}%").order('title ASC') 
    end 
end 
2

我不明白你爲什麼不使用查詢鏈接:

Movie.where('title LIKE ?', "a%").order(:title) 

但更好的是,創建一個範圍如Michael Lynch所說,它會增加您的代碼重用性。

實際上,您的代碼正在給出棄用警告。您必須在Rails服務器終端窗口中檢查它。雖然它正在運行,但讓它不受控制並不是一個好主意。

拒絕警告:不建議調用#find(:all)。請直接致電#all。您還使用了查找器選項。這些也被棄用。請建立一個範圍,而不是使用取景器選項。 (從(irb)處的irb_binding調用:1)

+1

謝謝,很好的電話。 –