Ho un album che ha_molte foto. Un'installazione counter_cache aggiorna la colonna photos_count nella tabella degli album. Come posso limitare il numero di foto per un album?Numero limite di oggetti in has_many association
risposta
Come aggiungere un metodo di convalida personalizzato al modello Foto?
LIMIT = 50
validate_on_create do |record|
record.validate_quota
end
def validate_quota
return unless self.album
if self.album.photos(:reload).count >= LIMIT
errors.add(:base, :exceeded_quota)
end
end
grazie a @Marcel Jackwerth! passare un po 'di tempo in 'rails console' controllando tutte e 3 le soluzioni, ho scoperto che il tuo è l'unico che impedisce davvero di creare" bambini indesiderati ")) –
Utilizzare un gancio di convalida:
class Album
has_many :photos
validate_on_create :photos_count_within_bounds
private
def photos_count_within_bounds
return if photos.blank?
errors.add("Too many photos") if photos.size > 10
end
end
class Photo
belongs_to :album
validates_associated :album
end
Grazie per il consiglio ragazzi. Ho il codice di Marcel funzionante. – chief
photos.size è un modo migliore per andare - http://blog.hasmanythrough.com/2008/2/27/count-length-size, da una domanda simile - http://stackoverflow.com/a/4836927/ 1396904 – andorov
Modificato come suggerito, @andorov – hurikhan77
Nel mio caso, è stato sufficiente usare validates_length_of
:
class Album
has_many :photos
validates_length_of :photos, maximum: 10
end
class Photo
belongs_to :album
validates_associated :album
end
Questa è la soluzione più pulita – fernandohur
Posso confermare che questo funziona davvero bene. L'unico problema è che se vai nella direzione opposta e inizi a creare un gruppo di "Foto" che appartengono all'album, lo stesso non può dirsi. Dovrai aggiungere: validate => true a belongs_to, anche se non l'ho testato per assicurarmi che funzioni sempre come previsto. – rovermicrover
effettivamente 'appartiene_album: validate: true' secondo http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to controlla le associazioni sul genitore salva, non su child save. .. così puoi aggiungere quanti figli vuoi e questo potrebbe essere un problema –
- 1. FactoryGirl has_many association
- 2. Rails has_many ActiveRecord Association personalizzato
- 3. ambito rotaie tramite has_many association
- 4. rotaie personalizzate has_many association (attraverso pg array)
- 5. activerecord find through association
- 6. Rails 3.1 limite utente creato oggetti
- 7. Limite S3 agli oggetti in un bucket
- 8. Come ordinare Rails AR.find per numero di oggetti in una relazione has_many
- 9. Numero limite di thread in Groovy
- 10. Numero limite di thread in numpy
- 11. Limite sul numero di colonne in cassandra
- 12. Convalida il numero di elementi has_many in Ruby on Rails
- 13. Convalida che A has_many Association abbia almeno un modello quando si usa FactoryGirl
- 14. Limite teorico per il numero di chiavi (oggetti) che possono essere memorizzati in una HashMap?
- 15. Rails polymorphic has_many: through
- 16. Ordine di rotaie per numero di risultati di has_many associazione
- 17. Limite! Dumpheap (windbg) output su n oggetti
- 18. UML aggregation vs association
- 19. Numero limite di utenti nell'applicazione C#
- 20. numero Primavera @Async limite di fili
- 21. numero limite HTML Select + di opzioni visibili
- 22. ngRipetizione - numero limite di risultati visualizzati
- 23. Rails association and forms
- 24. ClickOnce File Association
- 25. Association nel Common Lisp
- 26. Esiste un limite al numero di attività?
- 27. Numero limite di chiamate usando Parse
- 28. Contare il numero di oggetti in un'immagine
- 29. Factory Girl: come configurare un'associazione has_many/through
- 30. rails has_many: through has_many: through
controllo il conteggio prima di inserire? –
probabilmente non è il più carino di tutti, ma il più sicuro è @Marcel Jackwerth sulution, altri con l'uso di 'validates_associated' ti permettono di creare figli senza limite usando' parent.children.create' –