Si prega di spiegare la differenza tra has_and_belongs_to_many e has_many attraverso la relazione. Quando e dove usare quale?has_and_belongs_to_many vs has_many attraverso
risposta
Per quanto posso ricordare, has_and_belongs_to_many
offre una tabella di ricerca semplice che fa riferimento ai due modelli.
Per esempio,
storie possono appartenere a molte categorie. Le categorie possono avere molte storie.
Categories_Stories Table
story_id | category_id
has_many :through
ti dà un terzo modello che può essere utilizzato per memorizzare vari altri pezzi di informazioni che non appartengono a uno dei modelli originali.
Per esempio
persona può sottoscrivere molte riviste. Le riviste possono avere molti abbonati.
Quindi, possiamo avere un modello di sottoscrizione nel mezzo, che ci dà una tabella simile all'esempio precedente, ma con proprietà aggiuntive.
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date
E così via.
La regola più semplice generale è che si dovrebbe impostare un has_many: attraverso la relazione, se avete bisogno di lavorare con il modello di relazione come entità indipendente. Se non è necessario fare nulla con il modello di relazione, potrebbe essere più semplice impostare una relazione has_and_belongs_to_many (anche se sarà necessario ricordare di creare la tabella di join nel database). È necessario utilizzare has_many: through se sono necessarie convalide, callback o attributi aggiuntivi nel modello di join.
Vorrei anche aggiungere che ci sono molti metodi che i binari inseriscono in has_and_belongs_to_many e non in has_many: through .Tutti i metodi come l'assegnazione di una raccolta di valori all'associazione, non sembrano mostrare nella documentazione per has_many: attraverso http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference – e3matheus
La mia regola generale è, posso ottenere con un elenco di caselle qui? Se è così, allora è un'associazione di habtm. Se ho bisogno della casella di controllo per acquisire più informazioni sulla relazione rispetto al semplice sì/no, allora usa has_many: through. HABTM è semplice come usare il metodo _id con una semplice collezione_check_boxes. Has_many: attraverso spesso implica accept_nested_attributes_for.
È necessario utilizzare has_many: through se sono necessarie convalide, callback o attributi aggiuntivi sul modello di join.
- 1. has_many: attraverso un'associazione has_and_belongs_to_many
- 2. Rails 3.2.2 - has_many attraverso
- 3. Come migrare has_and_belongs_to_many a has_many through?
- 4. has_many attraverso attributi aggiuntivi
- 5. multipla has_many: attraverso
- 6. has_many: attraverso più has_one relazioni?
- 7. rails has_many: attraverso le associazioni
- 8. has_and_belongs_to_many in Rails
- 9. Rails has_many: attraverso con personalizzato foreign_key
- 10. accetta_nested_attributes_for con has_many =>: attraverso le opzioni
- 11. Ruby-on-Rails: più has_many: attraverso possibile?
- 12. Factory Girl has_many multipla attraverso c'è
- 13. rotaie personalizzate has_many association (attraverso pg array)
- 14. act_as_list con has_and_belongs_to_many relationship
- 15. Comprensione: opzione source di has_one/has_many attraverso Rails
- 16. Rails RSpec Test per un has_many: attraverso Relationship
- 17. Rails 3 has_many: attraverso il problema di denominazione
- 18. Rails 4: caselle di controllo con has_many attraverso
- 19. has_many attraverso più modelli con una fonte univoca
- 20. Rails 4 Has_many: attraverso join join con select
- 21. ambito personalizzato su has_many,: attraverso l'associazione (Rails 4)
- 22. rotaie 3 has_many: attraverso record di salvare errore
- 23. Come utilizzare i callback in has_many attraverso l'associazione?
- 24. Rails 3 - dove clausola sulla has_many attraverso l'associazione
- 25. Distruggi associazioni dopo l'ultimo has_many: attraverso il record viene eliminato
- 26. Rails has_many: attraverso il salvataggio di campi aggiuntivi
- 27. Come convalidare l'unicità di has_many: attraverso il modello di join?
- 28. Rails 4 Forma: has_many attraverso: caselle di controllo
- 29. Come popolare campi in un has_many attraverso unirsi tavolo
- 30. Rails 3: Selezione multipla con has_many attraverso le associazioni
nota che la tabella deve essere denominata in ordine alfabetico, vale a dire tabella categorie_storie in contrapposizione a storie_categorie: questa è la convenzione che lo fa funzionare. – Will
Grazie, ho cambiato il mio post ora – Dan
perché devono essere alfabetici? – ctilley79