header 排序
参考:https://medium.com/swlh/using-rails-and-html-to-view-sort-and-search-tables-fbf8a0543558
普通的列表页面:
#views/players/index.html.erb<h1>Players List</h1><table> <tr> <th>Player Name </th> <-- Each of these <th>Position </th> is a column header <th>Avg. Ranking </th> </tr> <% @players.each do |player| %> <tr> <td><%= player.name%></td> <-- Each of these adds <td><%=player.position %></td><td> data to the corresponding <td><%=player.avg_ranking %></td> column in the same row </tr> <% end %> </table>使用排序的列表页面
<h1>Players List</h1><table> <tr> <th><%= link_to "Player Name", :sort => "name"%> </th> <th><%= link_to "Position", :sort => "position"%> </th> <th><%= link_to "Avg. Ranking", :sort => "avg_ranking"%> </th> </tr> <% @players.each do |player| %> <tr> <td><%= player.name%></td> <td><%=player.position %></td><td> <td> <%=player.avg_ranking %></td> </tr> <% end %> </table>
实现点击进行排序
在controller进行增加
class PlayersController < ApplicationController def index @players = Player.order(params[:sort]) end增加:
class PlayersController < ApplicationController def index if params[:sort] != "avg_ranking" @players = Player.order(params[:sort]) elsif params[:sort] == "avg_ranking" @players = Player.all.sort_by{|player| player.avg_ranking} else @players = Player.all end end使用form表单:
<%= form_tag(players_path, method: :get) do %> <p> Search for a player </p> <%= text_field_tag(:search, params[:search]) %> <%= submit_tag ("Search") %> <% end %>
那么:
class PlayersController < ApplicationController def index if params[:search] search_players if params[:sort] == "avg_ranking" @players = Player.all.sort_by{|player| player.avg_ranking} elsif params[:sort] != "avg_ranking" @players = Player.order(params[:sort]) else @players = Player.all end enddef search_players if @player = Player.all.find{|player| player.name.include?(params[:search])} redirect_to player_path(@player) end enddef show @player = Player.find(params[:id]) endend


