Vì vậy, tôi đang sử dụng đá quý rails3_acts_as_paranoid và gặp một số vấn đề khi kiểm soát phạm vi với has_many: thông qua các liên kết.Rails actions_as_paranoid và has_many: thông qua
Ví dụ
# User.rb
acts_as_paranoid
has_many :folders
has_many :files, :through => :folders
-
# Folder.rb
acts_as_paranoid
belongs_to :user
has_many :files, :dependent => :destroy
-
# File.rb
acts_as_paranoid
belongs_to :files
Bây giờ cho phép chỉ nói ở đâu đó trong users_controller.rb tôi muốn truy vấn tất cả các file thuộc về một người sử dụng, cho dù chúng bị xóa và/hoặc thuộc về các thư mục đã bị xóa. Vì vậy, tự nhiên tôi sẽ giả định để làm một cái gì đó như sau
current_user.files.with_deleted
with_deleted
phương pháp thực hiện đó là công việc tháo gỡ các files.deleted_at IS NULL
... NHƯNG ... nó không loại bỏ các default_scope cho các thư mục được sử dụng loại phía sau bức màn. Vì vậy, chúng tôi vẫn có một điều kiện folders.deleted_at IS NULL
, ngăn tôi truy xuất các tệp thuộc về các thư mục mà tệp delete_at không phải là rỗng.
Tôi muốn tiếp tục sử dụng actions_as_paranoid, vì nó cực kỳ hữu ích trong tất cả các địa điểm khác của ứng dụng của tôi và đang cố gắng không làm điều gì đó như lọc thủ công và xuất hiện các phần của mảng .where_values
. Nhưng tôi không biết quá nhiều về xử lý phạm vi phức tạp hoặc những phương pháp có sẵn.
Có vẻ như phương pháp #unscoped là những gì bạn đang tìm kiếm tại đây: http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam
Tôi đã thử phương pháp chưa được quét, nhưng sẽ giảm phạm vi automagic join bridging user vào các tập tin, đặc biệt là 'INNER JOIN folders ON files.folder_id = folders.id WHERE folders.user_id = 1' trừ khi có lẽ tôi đã bỏ lỡ một tính năng không bị che khuất để giữ nó? – Misterparker
Tôi vẫn đang kiểm tra xem tôi có tìm được giải pháp hay không, nhưng chỉ cần lưu ý rằng dòng '@user = User.find current_user.id' là vô ích, vì bạn đang tải lại current_user – pjam