AASM:根据aasm_column对记录进行排序

时间:2014-05-24 03:07:31

标签: ruby-on-rails aasm

aasm_column :status  

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

这些是模型中的状态,我需要根据aasm_column的状态对记录进行排序。例如,我有五个记录,它们都有不同的状态。现在,我需要获取所有记录,它们应该首先排序为“未付”,然后是“付费”,等等。如果有一种优雅的方式来实现它。

1 个答案:

答案 0 :(得分:0)

aasm和其他state_machine宝石除了为您的记录提供结构外,不做任何其他事情。据我所知,他们没有办法确定数据的优先级(只有一种方法可以确定其state)。

我建议考虑让ActiveRecord来处理它(使用order):

#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方法需要工作,但我希望你明白这个想法?如果你想要我,我可以重构