2012-08-07 20 views
1

我的看法有這樣的:Haml的語法錯誤>不法分子class和id必須具有價值

%tr 
    %th =link_to 'Name', :sort =>'name', :id => 'name_header' 
的觀點

我的控制器方法具有這樣的:

@students = Student.order(params[:sort]).all 

我想通過點擊排序在列標題上。 同樣,我嘗試params[:id]而不是params[:sort],但它也失敗了。

回答

2

確保學生有列名。這會發現所有的學生,如find_all確實按照有關鍵值sort的值排序。我們希望是"name"

@students = Student.find(:all, :order => 'name') if params[:sort]=='name' 

併爲您的.haml,分配id作爲錨標記;

%tr 
    %th= link_to "Name", params.merge(:sort => 'name'), :id => 'name_header' 

或者,將id分配給表頭。

%tr 
    %th{:id => 'name_header'}= link_to "Name", params.merge(:sort => 'name') 

隨着.merge()你保持原有參數,如果鏈接被點擊,您添加GET參數sort。因爲我不知道如果id是用於鏈接的表頭,我把這兩個解決方案!作爲EXAMPLE,你可以克隆這個應用程序,並在/movies看到。

+0

在電影的EXAMPLE中,什麼是movies_path(:sort => ...)?這是一個函數,排序是參數?功能定義在哪裏? – Selvam 2012-08-08 06:22:23

+0

請看[Rails Routing from Outside In]中的2.2和2.3部分(http://guides.rubyonrails.org/routing.html) – 2012-08-08 13:51:36

+0

感謝Waldyr.ar獲取鏈接。 – Selvam 2012-08-09 10:35:11

2

我無法重現該錯誤,但是您將HTML選項代替URL選項傳遞至link_to。這可能會解決這個問題:

%th= link_to 'Name', '#', :sort =>'name', :id => 'name_header' 

還要注意,它應該是

%th= link_to 

,而不是

%th =link_to 
相關問題