【问题标题】:Ruby on Rails : Sorting and highlightingRuby on Rails:排序和突出显示
【发布时间】:2015-09-23 17:44:43
【问题描述】:

这是movies.controller.rb文件中的索引函数。

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

这是视图文件。 -# 这个文件是app/views/movies/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})

我需要按标题和发行日期对电影列表进行排序,并将其突出显示为黄色。但是,使用此代码,它既不会突出显示,也不会排序。错误在哪里?

【问题讨论】:

  • 由于您期望排序参数,您能否包括参数是什么?
  • 电影列表显示出来了吗?测试时 params[:sort_by] 的值是多少?如果硬编码 params[:sort_by] 的值会发生什么?
  • @ruby_newbie :在索引文件中。 :sort_by = 'title' 和 :sort_by = 'release_date'
  • @philosodad :是的,电影列表正在显示,“标题”和“发行日期”是链接,但单击它们时,它们的背景不会变黄。此外,它们没有得到排序。

标签: ruby-on-rails


【解决方案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])

【讨论】:

  • @MissingAshleys 太棒了!如果您觉得有需要,我还建议您使用 ransack gem 进行排序:github.com/activerecord-hackery/ransack
  • 哈哈。我是Rails的新手。现在只是学习基础知识。如果我变得更熟练一点,肯定会使用它!
猜你喜欢
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多