在Rails SQL查询中优先处理收藏夹

时间:2015-07-04 20:37:11

标签: mysql ruby-on-rails

我在Ruby on Rails中遇到了一个棘手的查询问题。设置是:

  • 用户模型
  • 联系人模型,是2个用户之间的简单连接模型,有2个字段,user_id和friend_id

我想执行搜索,返回符合某些搜索条件的所有用户,但优先考虑联系人,以便首先返回这些搜索条件。我的查询使用limit和offset来选择用户的子集,因此我需要在SQL查询中执行此操作,而不是在返回对象后对记录进行排序。

我正在尝试做这样的事情:

@users = User.limit(@limit).offset(@offset)

# Some search code...
@users = @users.where(....)

# Find the current user's contacts' IDs
contact_ids = current_user.contacts.collect{|a| a.friend_id}

# Order the results such that contacts are first
@users = @users.order( some function to prioritise records in the contact_ids list over the others )

# Return the query
render json: @users.all

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以使用order_by来实现此目的,假设favoritedContact模型上的二进制或整数字段:

@users = @users.order_by('favorited DESC')

注意: DESC代表“降序”。这通常适用于二进制字段,因为true将取值为1,false取值为0.如果您需要按升序排序(最小)到最大),您可以使用ASC代替DESC