私はRailsの初心者であると言うことから始めましょう。それで、これをできる限り説明しようと思います。参考までに、修正が機能していないように見えることを除いて、私に何が起こっているのかを正確に説明しているこのスレッドを参照してください。
Rails3.2のlimitメソッドとハッシュ順序に関する問題
主キー「id」でソートしようとしているイベントを含むデータベースがあります。ここでソート可能なテーブル列でRailscastをフォローしてみました:
http://railscasts.com/episodes/228-sortable-table-columns
並べ替えは正しく機能しますが、並べ替えは「最後の50」だけでなく列全体で行われます。
コントローラーコード:
def index
@events = Event.order(sort_column + " " + sort_direction).page(params[:page]).last(50)
@events = @events.sort_by(&:id)
@events = Kaminari.paginate_array(@events).page(params[:page]).per(10)
end
def sort_column
Event.column_names.include?(params[:sort]) ? params[:sort] : "event_id"
end
def sort_direction
%w[asc desc].include?(params[:direction]) ? params[:direction] : "desc"
end
Application_helper:
def sortable(column, title = nil)
title ||= column.titleize
direction = column == sort_column && sort_direction == "desc" ? "asc" : "desc"
link_to title, :sort => sort_column, :direction => direction
end
最後に、インデックスビューでは、次のように呼びます。
<th><%= sortable "event_id" %></th>
この質問にすでに回答されている場合は申し訳ありませんが、このテーマに関するサポートをいただければ幸いです。
編集
早速のお返事ありがとうございます。あなたがそこで何をしたかは理解していますが、インデックスビューで何らかの理由で例外が発生しました。
undefined method `id' for #<Array:0x00000004170c10>
Extracted source (around line #25):
22: <tbody>
23: <% @events.each do |event| %>
24: <tr>
25: <td><%= link_to event.id, event_path(event) %></td>
26: <td><%= event.event_date_time_local %></td>
27: <td><%= EventType.find(id = event.event_type_id).event_type %></td>
28: <td>