Mongoid Rails 5将带有多个参数的字符串转换为order_by方法的符号值



我有一个控制器方法,我试图传递一个具有多个order_by参数的字符串来返回一个排序的集合。

order_by语法适用于一个字符串化参数,例如

order_param = "image_fize_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)
# to hopefully yield a criteria that looks like:
>> #<Mongoid::Criteria
selector: {...},
options: {:sort => {"image_file_size"=> -1, "created_at" => -1 }}
class: ...>

有许多方法可以使用order_by!

irb(main):001:0> query.order_by("image_file_size DESC, created_at DESC")

其他方法:

irb(main):002:0> query.order_by(image_file_size: :desc, created_at: :desc)
irb(main):003:0> query.order_by(image_file_size: "desc", created_at: "desc")
irb(main):004:0> query.order_by(image_file_size: -1, created_at: -1)
irb(main):006:0> query.order_by([:image_file_size, -1], [:created_at, -1])
(This also accepts "desc", :desc)
irb(main):007:0> query.order_by(:image_file_size.desc, :created_at.desc)
=> 
#<Mongoid::Criteria
selector: {}
options:  {:sort=>{"image_file_size"=>-1, "created_at"=>-1}}
class:    ...
embedded: ...>

编辑:查看API文档了解更多细节。

最新更新