2011-08-09 7 views
0

Rails 3.0.5のRailscasts#228とruby 1.9.2p180に従っています。Rails 3:Sortable Columns

クラス名をProductからPlayerに変更した場合を除き、逐語的に逐語的にコードをコピーしました。ライアンが矢印を付けてソート方向を示す最後の部分もスキップします。正しいインデックスページを読み込み、必要なパラメータ(方向と並べ替え)を持つ目的のURLをすべて表示することはできますが、実際にはクリックで何も起こりません。 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コード。現在の位置: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

問題が見つかりました。その結果

default_scope :order => 'name_e' 

にPlayer.rb

、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も同様に使用するとまったく同じことが起こります。 –