Rails 5中Mongoid如何将多参数字符串转为order_by的符号化排序值
Rails 5 + Mongoid:单个字符串传递多排序参数的实现方法
我在Rails 5的控制器方法中,尝试传递一个包含多个排序规则的字符串给order_by方法,以此返回排序后的集合。
当传递单个排序规则的字符串时,order_by可以正常工作,示例如下:
order_param = "image_file_size DESC" query.order_by(order_param) # 输出结果: # >> #<Mongoid::Criteria # selector: {...}, # options: {:sort => {"image_file_size"=> -1}} # class: ...>
这是因为Mongoid会自动在后台完成字符串到排序条件的转换。
想问的是:有没有特定语法,不用复杂的字符串处理,就能把多个排序参数作为单个字符串传给order_by方法?比如想要实现下面的效果:
order_param = "image_file_size DESC created_at DESC" query.order_by(order_param) # 期望输出: # >> #<Mongoid::Criteria # selector: {...}, # options: {:sort => {"image_file_size"=> -1, "created_at" => -1 }} # class: ...>
直接用逗号分隔多个排序规则的字符串即可,Mongoid原生支持这种语法:
order_param = "image_file_size DESC, created_at DESC" query.order_by(order_param)
这样Mongoid会自动解析字符串中的每个排序规则,最终生成包含多个字段的排序条件,完全符合你的预期,不需要额外做字符串拆分或转换操作。
如果不想用逗号,也可以将字符串按规则拆分后转成数组传入,但逗号分隔的方式是最简洁直接的。
内容的提问来源于stack exchange,提问作者Ryan Roberts
相关产品推荐
相关产品推荐

