Używam więc klejnotu rails3_acts_as_paranoid i mam pewne problemy z kontrolowaniem zasięgu has_many: poprzez asocjacje.Szyny act_as_paranoid i has_many: do
Na przykład
# 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
Teraz pozwala tylko powiedzieć, gdzieś w users_controller.rb Chcę kwerendy wszystkie pliki należące do użytkownika, czy są usuwane i/lub należą do usuniętych folderów. Więc naturalnie Chciałbym założyć coś zrobić jak poniżej
current_user.files.with_deleted
with_deleted
metoda robi to praca na usunięcie files.deleted_at IS NULL
... ale ... robi usunąć default_scope dla folderów, które są wykorzystywane rodzaj za zasłoną. Nadal mamy warunek folders.deleted_at IS NULL
, uniemożliwiający mi pobieranie plików należących do tych folderów, w których wartość delete_at nie jest pusta.
Chcę dalej używać acts_as_paranoid, ponieważ jest niesamowicie użyteczny we wszystkich innych miejscach mojej aplikacji i staram się nie robić czegoś takiego jak ręczne filtrowanie i wyskakiwanie elementów z tablicy .where_values
. Ale nie wiem zbyt wiele na temat obsługi złożonych zakresów ani dostępnych metod.
Wygląda na to, że szukana metoda #unscoped jest tutaj: http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam
Próbowałem metody bez ograniczeń, ale to obniża zakres automagic dołącza użytkownika do plików, w szczególności 'INNER JOIN foldery ON files.folder_id = folders.id WHERE folders.user_id = 1' , chyba że przeoczyłem funkcję nieodkrytą, aby ją zachować? – Misterparker
Ciągle sprawdzam, czy znajdę rozwiązanie, ale zauważ, że wiersz '@user = User.find current_user.id' jest bezużyteczny, ponieważ przeładowujesz bieżący użytkownik – pjam