我的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)
(@articles只是该用户文章的一部分)
现在在我的视图(user#show
)中,我调用@metrics.each do |m|
,然后在表格中输出所有不同的内容。现在根据这个video,似乎带有url参数的link_to方法似乎是让用户动态切换他们想要排序的东西的最佳方式。
如何输入该url参数来对数组进行排序?我尝试使用@metrics.sort_by{|h| h[params[:sort]]}.each do |m|
作为我的链接中的url参数调用:sort
(即,视图表标题链接点击传递:sort => ":views"
。基本上我正在尝试执行此操作sort_by{|h| h[:views]}
它可以很好地排序数组。但是没有任何反应。数组没有排序。
编辑:
我通过使聚合方法将键作为字符串传递(即“id”而不是:id)来解决它。然后url params工作得很漂亮。
<%= link_to "Views", :sort => "views"%>
现在按升序对视图进行排序。
答案 0 :(得分:1)
要在descending
模式下订购,您可以否定-
您要用来排序的元素。
通过ascending
订购,然后revert
订阅您的收藏效果不佳。
例如
$> [{a: 'a1', b: 1}, {a: 'a2', b: 2}].sort_by{ |h| -h[:b] }
# => [{:a=>"a2", :b=>2}, {:a=>"a1", :b=>1}]
$> [{a: 'a1', b: 1}, {a: 'a2', b: 2}].sort_by{ |h| h[:b] }
# => [{:a=>"a1", :b=>1}, {:a=>"a2", :b=>2}]
以你的观点形式,你会有这样的东西(例如RadioButton,但它可以是Select或你喜欢的任何东西):
<%= radio_button_tag 'radio_order', 'ascending', true %> Ascending
<%= radio_button_tag 'radio_order', 'descending' %> Descending
<%= submit_tag "Order" %>
然后在助手中使用params[:radio_order]
获取值:
aggregate('views', params[:radio_order])