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实例。我知道,我的回答是这会返回一个数组实例,所以没有人被误导,但谢谢你。