2012-10-31 2 views
1

В файле haml view У меня есть ссылка, когда вы нажимаете, вы получаете все фильмы, отсортированные по названию или дате выпуска. код в контроллере:Когда вы используете «find_all_by», зачем использовать: order =>: title, а не: order => title

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

- доктор, это больно, когда я делаю это. - Тогда не делай этого. –

ответ

4

:title является символом. title - локальная переменная или метод.

Вы не указали title в этой области, следовательно, ваше исключение undefined local variable or method 'title'.

Другими словами, не делайте этого.

7
{:order => :title} 

{:order => 'title'} 

оба будут работать. Посмотрите на эту тему различий между строкой и символами: What's the difference between a string and a symbol in Ruby?

{:order => title} 

не работает, потому что вы пытаетесь присвоить ваш хэш-ключ значения, содержащееся в локальной переменной title, и это не есть, поэтому он выходит из строя

+0

whops, извините, клянусь, я не читал ваш ответ ...;) – rewritten

+0

Спасибо, проблема решена. – rubyknownothing

+0

еще один вопрос, вот как я передаю параметр «title». movies_path (: sort => 'title'), лучше ли использовать movie_path (: sort =>: title)? – rubyknownothing

1

Вы можете захотеть использовать "title", строку ...

ordering, @title_header = {:order => "title"}, 'hilite' 
Смежные вопросы