[英]Sorting a Rails active record
我有一個表A(:name, :address, :country_id)
。 我運行此查詢
ids = [1,2,3]
@result = A.where(country_id: ids)
但是,我想按以下順序獲取結果: records containing country_id = 2 first, then 1 and then 3
。
我應該如何編寫此查詢?
編輯:
@people = []
@result.each do |r|
@people.push([r,r.name])
end
我現在有一個數組@people of arrays,想要對其進行排序。 現在應該查詢什么?
另一個編輯:
@people.sort_by! {|p| preferred_order.index(p.first.country_id)}
這工作了。
您可以使用sort_by
:
ids = [1,2,3]
preferred_order = [2,1,3]
@result = A.where(country_id: ids)
@result.sort_by! { |u| preferred_order.index(u.country_id) }
一種選擇是添加一個額外的列
rails g migration add_sortorder_to_A sort_order:integer
然后添加一個
before_save :update_sort_order
def update_sort_order
if self.country_id == 1
self.update_attributes(sort_order:2)
elsif self.country_id ==2
self.update_attributes(sort_order:1)
........
end
或者,將您的sort_order放在各個國家/地區並在此排序。
或者,創建一個動態字段,該字段將為您提供sort_order。
可能有一種更優雅的方法來執行此操作,但這應該以一種快速而骯臟的方式進行,並允許您使用標准的activerecord查詢和排序。 (即一旦完成一次,您就可以忘記它)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.