Attenzione ad usare unscoped per inibire il default_scope

Scritto da Silvio Relli circa 4 anni fa. Jan3

Su un'applicazione Rails 3, mettiamo ci sia un default_scope sul modello Article che restituisce soltanto gli articoli pubblicati.

Con la seguente interrogazione
@article = current_user.articles.unscoped.find(params[:id])
vorremmo ottenere un determinato articolo anche se non è pubblicato, usando il metodo unscoped per annullare l'effetto del default scope.

Purtroppo però unscoped annulla anche il controllo sulla relazione dell'articolo con l'utente, togliendo praticamente il where che filtra l'utente dalla select, e permettendo di ottenere il post di un utente qualsiasi.

Similmente con @articles = current_user.articles.unscoped.all non otteniamo solamente gli articoli del current_user ma bensì tutti gli articoli.

Non solo si tratta di un comportamento inaspettato e non documentato, ma anche non auspicabile.

Fate molta attenzione perchè l'uso di unscoped può portare a comportamenti decisamente indesiderabili!
 

Comments are disabled