2013-01-07 8 views
7

Quindi sto usando il rails3_acts_as_paranoid gem e ho qualche problema nel controllo dell'ambito con has_many: attraverso le associazioni.Rails act_as_paranoid e has_many: through

Per esempio

# 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 

Ora lascia solo dire da qualche parte nel users_controller.rb voglio interrogare tutti i file appartenenti a un utente, se sono cancellati e/o appartengono a cartelle che sono state cancellate. Così, naturalmente, vorrei assumere per fare qualcosa di simile alla seguente

current_user.files.with_deleted 

with_deleted metodo fa il suo lavoro a rimuovere il files.deleted_at IS NULL

... MA ... doesnt rimuovere il default_scope per le cartelle che viene utilizzato tipo di dietro la tenda. Quindi abbiamo ancora una condizione folders.deleted_at IS NULL, che mi impedisce di recuperare i file che appartengono a quelle cartelle dove deleted_at non è nullo.

Voglio continuare a utilizzare act_as_paranoid, in quanto è incredibilmente utile in tutti gli altri punti della mia app, e sto cercando di non fare qualcosa come il filtraggio manuale e l'apertura degli elementi dell'array .where_values. Ma non so molto sulla gestione degli ambiti complessi o sui metodi disponibili.

+0

Sembra che il metodo #unscoped sia quello che stai cercando qui: http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

Ho provato il metodo senza ambito, ma questo elimina lo scopo di automagic unire il bridging ai file, in particolare 'INNER JOIN folders ON files.folder_id = folders.id WHERE folders.user_id = 1' a meno che forse non mi sia sfuggito una funzione di unscoped per mantenerlo? – Misterparker

+0

Sto ancora verificando se trovo una soluzione, ma mi limito a notare che la riga '@user = User.find current_user.id' è inutile, mentre stai ricaricando l'attuale_user – pjam

risposta

9

Beh, la mia domanda è stata sottovalutata, non so perché. Ma ho trovato la risposta:

Quando su un has_many through, il problema che stavo avendo era l'impossibilità di controllare l'ambito del modello passante (Cartelle in questo caso).

scopre che può solo fare questo

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

Per chi downvoted esso - mi piacerebbe sapere perché, così posso porre domande meglio la prossima volta. Grazie!