Scope

Mam taki scope:

scope :order_by_validity, -> { order("(valid_until IS NOT NULL AND VALID_UNTIL <= ‘#{Time.now + self.get_expiring_days.days }’) DESC, (valid_until IS NOT NULL AND VALID_UNTIL > ‘#{Time.now + self.get_expiring_days.days }’ ) DESC , (valid_until IS NULL) ASC") }

1 grupa jaką chciałbym mieć to valid_until jest null i poniżej jakieś daty
2 grupa to powyżej daty desc
3 grupa to gdzie valid until jest null i chciałbym po created_at mieć ASC.

Jak to zrobić , bo DESC i ASC działa automatycznie dla wszystkich , a nie dla poszczególnych grup.

Czy można to zrobić jakoś inaczej , np. mieć 3 scopy posortowane i je później łączyć??

Ostatecznie udało mi się zredukować do:
scope :order_by_validity, -> { order("(valid_until IS NOT NULL) DESC, (valid_until) ASC, created_at DESC") }

Mam jednak pytanie ogólne czy możemy łączyć scopy ze sobą , nie chodzi mi o metode merge:

scope1 = User.where(:email => ‘foo@bar.com’)
scope2 = User.where(:first_name => ‘hans’)
merged_scope = scope1.merge(scope2)
Coś takiego jak merge , ale add ( czyli sumuję 2 scopy, a nie bierze część wspólną).

najlepiej chyba tak

scope = User.scoped
scope = scope.where(…)
scope = scope.where(…)

mona to uproscic ale chyba sens rozumiesz, poza tym mozna laczyc bezposrednio User.where(…).where(…) i tak dalej