2015-09-23 54 views
0

這是movies.controller.rb文件中的索引函數。Ruby on Rails:排序和突出顯示

def index 
     @movies = Movie.find(:all, :order => (params[:sort_by])) 
     @sort_column = params[:sort_by] 
     end 

這是視圖文件。 - #這個文件的應用程序/視圖/電影/ index.html.haml %H1影

%table#movies 
    %thead 
    %tr 
     %th{:class=>("hilite" if @sort_column == "title")}= link_to 'Movie Title', movies_path(:sort_by=>'title'), :id=>"title_header"  
     %th Rating 
     %th{:class=>("hilite" if @sort_column == "release_date")}= link_to 'Release Date', movies_path(:sort_by=>'release_date'), :id=>"release_date_header" 
     %th More Info 
    %tbody 
    - @movies.each do |movie| 
     %tr 
     %td= movie.title 
     %td= movie.rating 
     %td= movie.release_date 
     %td= link_to "More about #{movie.title}", movie_path(movie) 

= link_to 'Add new movie', new_movie_path 

default.css

table#movies th.hilite { 
    background-color: yellow; 
} 

它給了我下面的錯誤中的第一行索引:

Couldn't find all Movies with 'id': (all, {:order=>nil}) 

我需要按標題和發佈日期對電影列表進行排序,並將其高亮顯示爲黃色。但是,使用此代碼,它既不會被突出顯示,也不會被排序。錯誤在哪裏?

+0

能否請您包括PARAMS是什麼,因爲你期待一個排序參數? –

+1

電影列表是否顯示出來?當你測試這個參數時,params [:sort_by]的值是多少?如果你硬編碼params [:sort_by]的值會發生什麼? – philosodad

+0

@ruby_newbie:在索引文件中。 :sort_by ='標題'和 :sort_by ='release_date' – Aiyoyo

回答

1

如果您使用的是Rails 3或4,find命令已更改。它不再需要一個符號,因爲它是第一個參數(在這裏閱讀更多:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find

Rails的3或4當量將是:

@movies = Movie.order(params[:sort_by]) 
+0

非常感謝!這工作。我正在使用Rails 4.2.1。 – Aiyoyo

+0

@MissingAshleys太棒了!我還建議ransack gem進行排序:https://github.com/activerecord-hackery/ransack你應該感受到這種需求。 – omarvelous

+0

哈哈。我是一個新手入門。現在就學習基礎知識。如果我變得更精通,一定要使用它! – Aiyoyo