2013-01-07 10 views
7

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.

+0

Wygląda na to, że szukana metoda #unscoped jest tutaj: http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

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

+0

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

Odpowiedz

9

Cóż, moje pytanie zostało odrzucone, nie wiem dlaczego. Ale znalazłem odpowiedź:

Kiedy miałem już wiele do czynienia, problemem, który miałem, była niemożność kontrolowania zakresu modelu przelotowego (w tym przypadku foldery).

Okazuje się, że można po prostu zrobić to

@myvar = Folder.unscoped { current_user.files.with_deleted } 

każdemu, kto go downvoted - Chciałbym wiedzieć, dlaczego, więc mogę zapytać lepszymi pytań następnym razem. Dzięki!

Powiązane problemy