2012-10-31 36 views
1

在視圖中haml文件我有一個鏈接,當您單擊時,您將獲得按標題或發佈日期排序的所有電影。 在控制器中的代碼是:使用「find_all_by」時,爲什麼使用:order =>:標題而不是: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

哎呀,對不起,我發誓我沒有讀你的答案......;) – rewritten

+0

謝謝大家,問題解決了。 – rubyknownothing

+0

還有一個問題,在查看這是我如何通過「標題」參數。 movies_path(:sort =>'title'),是更好使用movies_path(:sort =>:title)? – rubyknownothing

1

您可能需要使用"title",串...

ordering, @title_header = {:order => "title"}, 'hilite' 
相關問題