Supponiamo di avere un modello di post e un modello di commento. Usando un modello comune, Post ha molti commenti.default_scope e associazioni
Se Commento ha un set default_scope:
default_scope where("deleted_at IS NULL")
Come posso facilmente recuperare tutti i commenti su un post, a prescindere dal campo di applicazione? Questo produce risultati non validi:
Post.first.comments.unscoped
che genera le seguenti query:
SELECT * FROM posts LIMIT 1;
SELECT * FROM comments;
Invece di:
SELECT * FROM posts LIMIT 1;
SELECT * FROM comments WHERE post_id = 1;
Esecuzione:
Post.first.comments
produce:
Comprendo il principio di base dell'annullamento della rimozione di tutti gli ambiti esistenti, ma non dovrebbe essere a conoscenza e mantenere l'ambito di associazione?
Qual è il modo migliore per tirare TUTTI i commenti?
Perché non ci pensi intorno e crei un 'scope: active, dove (" deleted_at IS NULL ")' e lo chiama quando richiesto? – Yannis
Questo è quello che farei anch'io. Se ti ritrovi a dover "annullare" il tuo valore predefinito, allora non è davvero un buon valore predefinito. –
Non sono d'accordo. Penso che sia buona norma nascondere per impostazione predefinita e sovrascrivere esplicitamente quella predefinita quando necessario. Questo è in qualche modo correlato alle contromisure XSS di Rails. Dovevi html_escape ogni output di contenuto generato dall'utente in Rails 2. Al giorno d'oggi, tutto è sfuggito di default e devi sovrascriverlo manualmente anche se hai molti contenuti non generati dall'utente. Riguarda la sicurezza. Sicurezza delle informazioni in questo caso. Potresti essere denunciato per avere un commento illegale sulla tua pagina perché hai dimenticato il named_scope. Oppure i clienti impazziscono per vedere contenuti inediti su qualche pagina. – crispy