2013-08-06 5 views
2

누군가가 다음 문제를 해결할 수있는 아이디어가있을 수 있습니다.활성 레코드 인스턴스의 모든 쿼리

나는 모델을 가지고 있으며이를 쿼리하려고합니다.

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">]> 
+0

my_model을 사용하여 수행하려는 작업을 확신 할 수 없습니다. –

+0

예제를 추가했습니다 :). – Mattherick

답변

2

나는 이것이 당신이 요구하는지 달성 생각합니다. 당신이 할 수 있도록

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

그러나이 배열의 인스턴스를 반환

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

거의 그렇습니다. 그러나 약간의 오류가 있습니다 .. MyModel.find (2) .all.map (& : id) => [2,3,4]. 1이 누락되었습니다. MyModel.find (1) .all.map (& : id) => [1], 2,3 및 4가 없습니다. – Mattherick

+0

로컬로 다시 만들 수 없습니다. 예상대로'.find'에 전달 된 id와 관계없이 동일한 결과 세트를 얻습니다. 어떤 RDBMS를 사용하고 있습니까? – deefour

+0

sqlite3을 사용하고 있습니다. 다른 사실 : 레일 4.0.0, 루비 2.0.0-p195 – Mattherick

1

가능한 솔루션은 액티브 :: 관계 인스턴스가 배열 인스턴스 메소드의 많은 반응한다는 점을 이용하는 것 추가 스코프를 계속 추가하지 마십시오. 귀하의 경우에 받아 들일 수 있는지 여부는 귀하에게 달려 있습니다.

+0

감사! 또한 작동하지만 @ Deefour의 대답이 더 편리하다고 생각합니다. 그러나 어쨌든 고마워. – Mattherick

+1

이것은 또한 ActiveRecord :: Relation 인스턴스를 반환하지 않습니다. – deefour

+0

네, 맞습니다. – Mattherick

관련 문제