7

Tôi đã nhìn thấy rất nhiều bài đăng về vấn đề này, nhưng dường như không có vấn đề nào giải quyết được vấn đề của tôi. Tôi có một default_scope trên một mô hình như vậy:Đường ray 3.1.3 phạm vi chưa được kiểm tra

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

Tôi có khác phạm vi (bình thường), và tôi muốn tạo ra một phạm vi inactive sử dụng unscoped. Tôi muốn xác định nó như là một phạm vi, nhưng nó chỉ hoạt động khi được định nghĩa là một phương pháp học:

# 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 

Có cách nào mà tôi bị mất, hay tôi phải sử dụng một phương pháp học để xác định phạm vi này?

+0

Loại tương tự như http://stackoverflow.com/questions/6919307/rails-3-default-scope-scope-with-overrride –

+0

(nếu bạn đọc các bình luận ở đó, không thực sự là một giải pháp) –

+0

Tôi cũng sẽ nói vào 'except' và' only' nhưng chúng dường như không phủ nhận 'default_scope' từ trong phạm vi khác, tương tự như vấn đề với' unscoped' và 'with_exclusive_scope'. –

Trả lời

6

Có vẻ như không phải là một cách để làm điều này. Tôi đã mở một vấn đề trên repo đường ray trên github ...

+2

Là một công việc xung quanh, bạn có thể tạo một phương thức lớp có sử dụng không được quản lý và hoạt động tốt. –

+1

Để tham khảo: https://github.com/rails/rails/issue/4306 –

0

Hãy thử điều này

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

không hoạt động hoặc – sethvargo

+1

nhưng bị thêm nó vào danh sách các khả năng chưa được thử – sethvargo

+0

ftr của chúng tôi, không phải là chưa được điều chỉnh {lambda {...}} – sethvargo

Các vấn đề liên quan