gpt4 book ai didi

ruby-on-rails - 按 Activerecord 中的特定值排序

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:44 26 4
gpt4 key购买 nike

在 Ruby on Rails 中,我试图根据当前用户是否获胜来对玩家的比赛进行排序。

排序顺序为:

  • 按当前用户是否获胜排序
  • 然后按created_at等排序

我不知道该怎么做:

Match.all.order('winner_id == ?', @current_user.id)

我知道这行在语法上不正确,但希望它表示顺序必须是:

1) 当前用户获胜的比赛2) 其他比赛

最佳答案

您可以在 SQL ORDER BY 子句中使用 CASE 表达式。然而,AR 不赞成在 ORDER BY 中使用占位符,所以你必须做这样令人讨厌的事情:

by_owner = Match.send(:sanitize_sql_array, [ 'case when winner_id = %d then 0 else 1 end', @current_user.id ])
Match.order(by_owner).order(:created_at)

这在任何 SQL 数据库中都应该是一样的(当然假设您的 @current_user.id 是一个整数)。

您可以通过将类方法用作范围来减少它的不愉快:

class Match < ActiveRecord::Base
def self.this_person_first(id)
by_owner = sanitize_sql_array([ 'case when winner_id = %d then 0 else 1 end', id])
order(by_owner)
end
end

# and later...
Match.this_person_first(@current_user.id).order(:created_at)

隐藏脏话。

关于ruby-on-rails - 按 Activerecord 中的特定值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com