У меня есть немного кода в моей модели user.rb
:
def self.aggregate(articles)
array = []
articles.each do |a|
array << {
:id => a.nid,
:views => a.daily_view_metrics.sum_views(a.nid),
:date => a.daily_view_metrics.latest_date(a.nid),
:title => a.daily_view_metrics.latest_title(a.nid),
:visits => a.daily_view_metrics.sum_visits(a.nid)
}
end
return array
end
В моем user_controller
я перехожу к методу show
@metrics = User.aggregate(@articles)
(@статьи — это просто подмножество статей для этого пользователя)
Теперь, на мой взгляд (user#show
), я вызываю @metrics.each do |m|
, а затем вывожу все разные вещи в таблицу. Теперь, согласно этому видео, кажется, что метод link_to с параметром url кажется быть лучшим способом заставить пользователей динамически переключаться между тем, что они хотят отсортировать.
Как я могу ввести этот параметр URL для сортировки массива? Я попытался вызвать @metrics.sort_by{|h| h[params[:sort]]}.each do |m|
с :sort
в качестве параметра URL-адреса из моих ссылок (т. Е. Щелчок по ссылке заголовка таблицы представлений передает :sort => ":views"
в. По сути, я пытаюсь сделать это sort_by{|h| h[:views]}
, так как это отлично работает для сортировки массива. Однако ничего не происходит. Массив не т отсортировано.
РЕДАКТИРОВАТЬ:
Я решил это, заставив агрегатный метод передавать ключ в виде строки (т.е. «id», а не: id). тогда параметры URL работают прекрасно.
<%= link_to "Views", :sort => "views"%>
теперь сортирует по просмотрам в порядке возрастания.
.to_sym
, если вам нужно.params[:sort] # => "views"
params[:sort].to_sym # => :views
- person Rafa Paez   schedule 10.03.2014