我正在尝试制作一个高分图表,其中包含一个用户名单,这些用户已经获得了大拇指"按拇指下降的顺序排序。我几乎可以使用它,但想不出如何正确地订购记录。
所以我们有两个模型,分别是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
这很好用,但没有以正确的顺序显示用户。我想修改控制器代码,按照上个月他们有多少拇指的顺序列出用户,但无法理解它。有人可以帮忙吗?
感谢
答案 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
的范围,因此我的建议是在查询中添加顺序,因此您无需关心额外的代码和复杂性来订购数据
答案 3 :(得分:0)
您可以将代码更改为:
User.select("users.*, thumbs.*, count(thumbs.id) AS thumbs_count").joins(:thumbs).from_this_month.group("users.id").order("thumbs_count DESC")
让我知道它何时起作用。