1

ビューの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>
4

3 に答える 3

7
{:order => :title}

{:order => 'title'}

両方とも機能します。文字列と記号の違いについては、このスレッドをご覧ください。Rubyの文字列と記号の違いは何ですか?

{:order => title}

ローカル変数に含まれている値をハッシュキーに割り当てようとしているため機能titleせず、存在しないため、クラッシュします

于 2012-10-31T14:59:23.713 に答える
4

:titleはシンボルです。 titleローカル変数またはメソッドです。

titleこのスコープで定義していないため、undefined local variable or method 'title'例外です。

言い換えれば、そうしないでください。

于 2012-10-31T14:58:33.620 に答える
1

"title"、文字列を使用することをお勧めします。

ordering, @title_header = {:order => "title"}, 'hilite'
于 2012-10-31T14:59:29.927 に答える