结果集的ruby / rails排序

时间:2015-09-16 08:37:19

标签: ruby-on-rails ruby

我正在尝试制作一个高分图表,其中包含一个用户名单,这些用户已经获得了大拇指"按拇指下降的顺序排序。我几乎可以使用它,但想不出如何正确地订购记录。

所以我们有两个模型,分别是User和Thumb。

在控制器中,我们有

def thumbs_highscores
  user_ids = current_account.thumbs.from_this_month.map(&:user_id)
  @users = current_account.users.where(:id =>emp_ids)
end

在视图中,我正在显示喜欢这个的高分......

%table.center{:style => "max-width: 600px"}
  %tr
    %th Rank
    %th Name
    %th.right # Thumbs received
  - @users.each_with_index do |user, i|
    %tr
    %td= i+1 
    %td= user.name
    %td.right 
      - user.thumbs.from_this_month.each do |thumb|
        %i.fa.fa-star.orange

这很好用,但没有以正确的顺序显示用户。我想修改控制器代码,按照上个月他们有多少拇指的顺序列出用户,但无法理解它。有人可以帮忙吗?

感谢

4 个答案:

答案 0 :(得分:0)

变化

@users.sort_by{|u| u.thumbs_from_this_month.size}.reverse.each_with_index do |user, i|

@FeignClient("modelService")
public interface ProductModelService {...}

您可以急切地在控制器中加载拇指关联以提高效率,并在那里进行排序。

答案 1 :(得分:0)

我猜你可以在这里使用scope的帮助。我对lambdas并不是很熟练,但我猜想用户模型中的这样的东西会起作用:

scope :thumbs_desc_list, lambda { User.all.map {|u| u.thumbs_this_month}.sort { |x,y| y <=> x } }

本次假设您的用户模型中有一个名为thumbs_this_month的实例方法,它会为您提供本月收到的拇指数量。

之后在控制器

@users = User.thumbs_desc_list

...现在你应该能够在你想要的任何地方迭代@users,让他们按照拇指数量下降。

使用范围将允许您在之后的任何地方使用正确的订单列表。

答案 2 :(得分:0)

根据我对您的代码的理解,您应该有一个名为from_this_month的范围,因此我的建议是在查询中添加顺序,因此您无需关心额外的代码和复杂性来订购数据

检查order documentation

答案 3 :(得分:0)

您可以将代码更改为:

User.select("users.*, thumbs.*, count(thumbs.id) AS thumbs_count").joins(:thumbs).from_this_month.group("users.id").order("thumbs_count DESC")

让我知道它何时起作用。