2014-05-24 2 views
1
aasm_column :status 

aasm do 
    state :unpaid, :initial => true 
    state :paid 
    state :refund 
    state :closed 
    state :cancelled 
... 

이들은 모델의 상태이므로 aasm_column의 상태에 따라 레코드를 정렬해야합니다. 예를 들어 다섯 개의 레코드가 있고 모두 서로 다른 상태를 가지고 있습니다. 이제 모든 기록을 가져와야합니다. 처음에는 '무보수'로 분류하고 두 번째로는 '지불'해야합니다.이를 달성 할 수있는 우아한 방법이 있다면.AASM : aasm_column에 따른 정렬 레코드

+1

루비를 통해 정렬하고 있습니까? 아니면 데이터베이스에서 정렬을 수행해야합니까? – pdobb

+0

어쩌면, 나는 ** 주정부의 우선 순위를 달성하기위한 방법을 제공하는 ** aasm **을 선호하므로 루비 나 데이터베이스에 상관없이 정렬 할 수 있습니다. – hiveer

답변

0

aasm 및 기타 state_machine 보석은 기록에 구조를 제공하는 것 외에는 아무 것도하지 않습니다. 내가 아는 한, 데이터 우선 순위를 지정할 방법이 없습니다 (state을 결정하는 유일한 방법).

내가 (order 포함)를 처리 할 수 ​​ActiveRecord를 받고보고하는 것이 좋습니다 것입니다 :

#app/models/your_model.rb 
Class Model < ActiveRecord::Base 
    scope :prioritize, -> { order(unpaid: :desc, paid: :asc) } 
end 

이 당신이 전화를 할 수 있습니다 :

def index 
    @items = Model.where(values: here).prioritize 
end 

- 물론

order 메서드가 작동해야하지만 아이디어를 얻으시기 바랍니다. 당신이 나를 원하면 리팩토링 할 수 있습니다

+1

대답 해 주셔서 감사합니다. 명확하고 간단합니다. 하지만 ** aasm_state ** 유형이 문자열인지 알고 있다고 생각합니다. 따라서 상대적으로 복잡한 정렬 문제로 사용하기가 어렵습니다. – hiveer

+0

'string'유형으로 정렬하기가 왜 어려운가요? – alto