簡體   English   中英

活動記錄實例中的所有查詢

[英]active record all query from instance

也許有人知道我該如何解決以下問題:

我有一個模型,想查詢它。

def MyModel < ActiveRecord::Base

  # instance method
  def all
    my_models = MyModel.all
    my_models.?? # order my_models ActiveRecord::Relation, that the instance which calls the .all instance method is at first position, and the rest is sorted somehow,..whatever.
  end

end

我該如何解決?

編輯:

示例:MyModel有一個名稱。 我有四個MyModel實例

MyModel.all => #<ActiveRecord::Relation [#<MyModel id: 1, name: "name1">, #<MyModel id: 2, name: "name2">, #<MyModel id: 3, name: "name3">, #<MyModel id: 4, name: "name4">]>

我現在要:

MyModel.find(1).all => #<ActiveRecord::Relation [#<MyModel id: 1, name: "name1">, #<MyModel id: 2, name: "name2">, #<MyModel id: 3, name: "name3">, #<MyModel id: 4, name: "name4">]>

MyModel.find(2).all => #<ActiveRecord::Relation [#<MyModel id: 2, name: "name2">, #<MyModel id: 1, name: "name1">, #<MyModel id: 3, name: "name3">, #<MyModel id: 4, name: "name4">]>

MyModel.find(3).all => #<ActiveRecord::Relation [#<MyModel id: 3, name: "name3">, #<MyModel id: 1, name: "name1">, #<MyModel id: 2, name: "name2">, #<MyModel id: 4, name: "name4">]>

我相信這可以滿足您的要求。

def all
  self.class.order("case when id = #{id} then 0 else id end")
end

一種可能的解決方案是利用ActiveRecord :: Relation實例響應許多Array實例方法的事實:

def all
  ary = self.class.order(:id)
  ary = ary.unshift(self)
  ary.uniq
end

但是,這將返回Array的一個實例,因此您無法繼續追加其他范圍。 由您決定是否適合您的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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