2011-08-09 35 views
0

我下面Railscasts#228在Rails的3.0.5和紅寶石1.9.2p180。的Rails 3:排序的列

我抄碼近逐字從逐字從產品改變類名球員除外。我也在跳過Ryan添加箭頭來表示排序方向的最後部分。我可以加載正確的索引頁面,並查看所有需要的網址和所需的參數(方向和排序),但實際上沒有發生點擊事件。 URL正在更改,但該頁面未重新加載。

這裏是我的代碼:

ApplicationHelper

def sortable(column, title = nil) 
    title ||= column.titleize 
    direction = (column == params[:sort] && params[:direction] == "asc") ? "desc" : "asc" 
    link_to title, :sort => column, :direction => direction 
    end 

PlayersController

def index 
    @players = Player.order(sort_column + ' ' + sort_direction) 
    end 

    private 

    def find_team 
    session[:team] ||= Team.new 
    end 

    def sort_column 
    Player.column_names.include?(params[:sort]) ? params[:sort] : "name_e" 
    end 

    def sort_direction 
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc" 
    end 

感謝您的幫助!

編輯:按照要求,HTML代碼。您可以看到Position的鏈接目前是desc,因爲我位於:http://localhost:3000/players?direction=asc&sort=abb_pos。但是,此列或任何其他列沒有發生實際排序。

<th><a href="/players?direction=asc&amp;sort=name_e">Name</a></th> 
<th><a href="/players?direction=asc&amp;sort=team_e">Team</a></th> 
<th><a href="/players?direction=desc&amp;sort=abb_pos">Position</a></th> 
<th><a href="/players?direction=asc&amp;sort=height">Height</a></th> 
<th><a href="/players?direction=asc&amp;sort=weight">Weight</a></th> 
+0

你能提供一些運行時的html代碼它的鏈接?? – Lichtamberg

回答

0

發現的問題。我有下面的代碼在我的播放器型號:

Player.rb

default_scope :order => 'name_e' 

其結果是,在SQL搜索生成這個樣子:

SELECT `players`.* FROM `players` ORDER BY name_e, avg_points desc 
1

彌敦道

我建議這樣做第一件事:

def index 
    order = sort_column + ' ' + sort_direction 
    puts "-- order:'#{order}'" 
    ... 
end 

點擊鏈接,然後查看服務器的控制檯爲「 - 」輸出。最可能的是,在某處存在一個邏輯缺陷,使得實際編譯的ORDER子句總是相同的。鏈接本身看起來非常好。除非鏈接中有#字符,否則所有的點擊都應該有效(即瀏覽器應該重新加載內容)。

至於一般的問題,有一個名爲handles_sortable_columns寶石,它讓你排序的列的任何努力都沒有。

亞歷

+0

這很奇怪。當我使用handles_sortable_columns時也會發生完全相同的情況。 –