Рельсы 3: сортируемые столбцы - PullRequest
0 голосов
/ 10 августа 2011

Я слежу за Railscasts # 228 в Rails 3.0.5 и ruby ​​1.9.2p180.

Я дословно скопировал код почти дословно, за исключением изменения имени класса с 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 код.Вы можете видеть, что ссылка для 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>

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Натан

Я бы предложил сделать это первым делом:

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

Щелкните по ссылкам, а затем посмотрите в консоли сервера этот вывод "-".Скорее всего, где-то есть логический недостаток, который делает фактическое скомпилированное предложение ORDER всегда одинаковым.Сами ссылки выглядят совершенно нормально.Если в ссылках где-то нет символа #, все клики должны работать (т. Е. Браузер должен перезагрузить контент).

Что касается общей проблемы, существует гем под названием handles_sortable_columns , который дает вам сортируемые столбцы без каких-либо усилий.

Alex

0 голосов
/ 11 августа 2011

Нашел проблему.В моей модели плеера был следующий код:

Player.rb

default_scope :order => 'name_e'

В результате сгенерированный SQL-запрос выглядел так:

SELECT `players`.* FROM `players` ORDER BY name_e, avg_points desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...