簡體   English   中英

對Rails活動記錄進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM