7

Bu konuyla ilgili birçok yayın gördüm, ancak hiçbiri sorunumu çözmüyor gibi görünüyor.Raylar 3.1.3 unscoped scope

default_scope where(:is_active => true).order('LOWER(table.name)'); 

Diğer (normal) kapsamları var ve ben unscoped kullanarak bir inactive kapsamını oluşturmak istiyorum: Ben şöyle bir model üzerinde bir default_scope var. Bir kapsamda olarak tanımlamak istiyorum, ama bir sınıf yöntemi olarak tanımlanan zaman çalışır:

# works 
def self.inactive 
    unscoped { where(:is_active => false) } 
end 

# none of these work 
scope :inactive, unscoped { where(:is_active => false) } 
scope :inactive, with_exclusive_scope { where(:is_active => true) } 
scope :inactive, unscoped.where(:is_active => false) 
scope :inactive, lambda { unscoped { where(:is_active => false) } } 
scope :inactive, unscoped { lambda { where(:is_active => false) } } 
unscoped do 
    scope :inactive, where(:is_active => false) 
end 

Kaçırdığım bir yolu var mı, yoksa bu kapsamı tanımlamak için bir sınıf yöntemi kullanmak gerekiyor?

+0

ile ilgili bir sorun açtım http://stackoverflow.com/questions/6919307/rails-3-default-scope-scope-with-overrride –

+0

(Eğer okuyorsanız) orada yorumlar, gerçekten bir çözüm yok) –

+0

Ayrıca 'except' ve' only''a da bakıyorum ama 'uns_system' ile problemin benzeri bir başka kapsamdan 'default_scope''u reddetmiyorlar ve 'with_exclusive_scope'. –

cevap

6

bunu yapmanın bir yolu olmalı görünmüyor deneyin. Github ...

+2

Etrafında bir çalışma olarak, sınıflandırılmamış kullanan ve iyi çalışan bir sınıf yöntemi oluşturabilirsiniz –

+1

Başvuru için: https://github.com/rails/rails/sorunlar/4306 –

0

bu

scope :inactive, lambda { unscoped.where(:is_active => false) } 
+0

ya da – sethvargo

+1

çalışmıyor ama hasta olmayan olasılıklar – sethvargo

+0

ftr listesine eklemek istiyorum, ne de notbped {lambda {...}} – sethvargo