2015-09-23 52 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