Rails从表单选择传入变量到视图助手方法

时间:2014-03-10 18:24:28

标签: ruby-on-rails ruby sorting

我的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"%>现在按升序对视图进行排序。

1 个答案:

答案 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])