2013-02-10 57 views
0

我得到了這段代碼,當我嘗試使用第二種更優雅的方法時,我得到了「缺少方法」。我認爲文檔在:http://guides.rubyonrails.org/active_record_querying.html是相當無益或不完整的。有任何想法嗎?在ActiveRecord上Ruby on Rails chaning方法不起作用?

順便說一句,隨時幫忙寫一個更加「oneliner」優雅的辦法處理這一:)

def index 
@sortby = params[:sort_by] 

# THIS WORKS 

#if @sortby == nil 
# @movies = Movie.all 
#else 
# @movies = Movie.order(@sortby) 
#end 

# THIS DOESNT. WHY? I THOUGHT METHOD CHAINING AND LAZYLOAD WOULD WORK. 
@movies = Movie.all 
@movies = @movies.order(@sortby) unless @sortby == nil 

+0

你的代碼是開放的SQL注入攻擊:http://stackoverflow.com/questions/7771103/rails-3-activerecord-order-what-is-the-proper-sql-injection-work-around – house9 2013-02-10 16:12:08

回答

0

all負荷記錄並返回數組。嘗試使用scoped

@movies = Movie.scoped 
@movies = @movies.order(@sortby) unless @sortby.nil? 
+0

而如果我沒有記錯,Rails 4中的這個變化 – cpuguy83 2013-02-10 13:56:59

+0

是的。謝啦, – imbageek 2013-03-16 12:58:00

0

您可以在一行中做到這一點。

@movies = params[:sort_by].nil? ? Movie.all : Movie.order(params[:sort_by]).all 

在你的情況下,你會得到關於'未定義數組的方法順序'的錯誤,我想。 ActiveRecord方法.all返回數組。