当使用“find_all_by”时,为什么要使用:order => :title而不是:order =>标题

时间:2012-10-31 14:55:06

标签: ruby-on-rails ruby

在视图haml文件中我有一个链接,当你点击时,你得到按标题或发布日期排序的所有电影。 控制器中的代码是:

def index
    sort = params[:sort] || session[:sort]
    case sort
    when 'title'
      ordering,@title_header = {:order => :title}, 'hilite'
    when 'release_date'
      ordering,@date_header = {:order => :release_date}, 'hilite'
    end
   # some more codes here
@movies = Movie.find_all_by_rating(@selected_ratings.keys, ordering)
end

如果我改变

ordering,@title_header = {:order => :title}, 'hilite'

 ordering,@title_header = {:order => title}, 'hilite'

它出错了:

undefined local variable or method `title' for #<MoviesController:0xb29a853c>

3 个答案:

答案 0 :(得分:7)

{:order => :title}

{:order => 'title'}

都会奏效。请查看此主题以了解字符串和符号之间的差异:What's the difference between a string and a symbol in Ruby?

{:order => title}

不起作用,因为您试图为您的哈希键分配title局部变量中包含的值,但它不存在,因此崩溃

答案 1 :(得分:4)

:title是一个符号。 title是一个局部变量或方法。

您尚未在此范围内定义title,因此您的undefined local variable or method 'title'例外。

换句话说,不要这样做。

答案 2 :(得分:1)

您可能希望使用"title",字符串......

ordering, @title_header = {:order => "title"}, 'hilite'