Ruby on rails 活动记录来自实例的所有查询

Ruby on rails 活动记录来自实例的所有查询,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,也许有人知道我如何解决以下问题: 我有一个模型,想查询它 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

也许有人知道我如何解决以下问题:

我有一个模型,想查询它

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
def MyModel
我怎样才能解决这个问题

编辑:

例如: 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.all=>#
我现在想:

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">]>
MyModel.find(1).all=>#
MyModel.find(2).all=>#
MyModel.find(3).all=>#

我相信这可以满足您的要求

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

一个可能的解决方案是利用ActiveRecord::Relation实例响应许多数组实例方法的事实:

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

但是,这将返回数组的实例,因此您不能继续追加其他作用域。由您决定在您的情况下这是否可以接受。

我不确定您试图用我的_模型实现什么。我添加了一个示例:)。几乎可以,但有一点错误。。MyModel.find(2).all.map(&:id)=>[2,3,4]。1号失踪。MyModel.find(1).all.map(&:id)=>[1],2,3和4丢失..我无法在本地重新创建它。无论传递给
.find
的id是什么,我都会得到相同的结果集,正如预期的那样。您正在使用什么RDBMS?我正在使用sqlite3。其他事实:rails 4.0.0,ruby 2.0.0-p195Ok对不起,是我的错。我使用STI和self.class,因为类:),我只得到了3条记录。通过直接调用:MyModel.order(“case when id=#{id}然后0 else id end”)一切都很好!谢谢谢谢同样有效,但我认为@Deefour的答案更方便。不过还是要谢谢你。这也不会返回ActiveRecord::Relation实例。我知道,我的回答是这会返回一个数组实例,所以没有人被误导,但谢谢你。