Câu hỏi ActiveRecord STI: Làm thế nào tôi có thể thoát khỏi phạm vi mặc định của lớp cha


Trên Rails 3.1 RC6, đã cho

class Animal < ActiveRecord::Base
  default_scope where(legs: 4)
end

Những điều sau đây không hoạt động như mong đợi:

class Man < Animal
  default_scope unscoped.where(legs: 2)
end

Câu lệnh SQL kết quả trông giống như sau:

SELECT * FROM animals WHERE legs = 4 AND legs = 2

Làm thế nào tôi có thể ghi đè hoàn toàn phạm vi mặc định của lớp cha?

Tôi cũng đã thử những điều sau không ai trong số đó hoạt động:

default_scope{ unscoped.where legs: 2 }
default_scope with_exclusive_scope{ legs: 2 }

10
2017-08-30 05:53


gốc




Các câu trả lời:


Tôi đào sâu vào mã nguồn của Rails và đưa ra một giải pháp hoạt động dưới Rails 3.1 (thử nghiệm với activerecord 3.1.0.rc6):

class Animal < ActiveRecord::Base
  default_scope where(legs: 4)
end

class Man < Animal
  self.default_scopes = []
  default_scope where(legs: 2)
end

8
2018-03-13 08:50



Dường như điều này hoạt động trong Rails 3.0: self.default_scoping = [] - jemminger


Tôi đã tìm thấy điều này và nó đã giúp tôi http://m.onkey.org/default-scopes-and-inheritance-to-the-rescue


0
2018-05-19 08:02



Liên kết này bị hỏng. Bạn có biết nó có thể di chuyển đến đâu không? - BananaNeil