Rails中如何排序对象并将new_response为true的记录前置?
解决方案
你需要调整排序的优先级,先按new_response倒序(让true的记录排在最前面),再按id倒序,这样既能保证带未读响应的请求前置,同时同组内的记录也按ID从新到旧排列。
直接用多条件排序即可实现:
@requests = current_fan.handled_requests.order(new_response: :desc, id: :desc)
如果你的Rails版本较低,不支持哈希式的order参数,可以用SQL字符串写法:
@requests = current_fan.handled_requests.order("new_response DESC, id DESC")
为什么你之前的写法无效?
- 你第一次尝试的两次
order调用,后面的order(:new_response)会覆盖之前的排序逻辑,reverse_order反转的id排序会被后续的order操作冲掉,最终只会按new_response升序排列(false在前,true在后),和你的需求相反。 prioritize并不是Active Record的内置方法,所以这个调用会直接报错。
内容的提问来源于stack exchange,提问作者daveasdf
相关产品推荐
相关产品推荐

