2011-08-09 36 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时也会发生完全相同的情况。 –