0

modèles donnéshas_many par association avec un objet existant/ActiveRecord

class Composition < ActiveRecord::Base 
    attr_accessible :content 

    has_many :compositions_tags 
    has_many :tags, :through => :compositions_tags 

end 

class Tag < ActiveRecord::Base 
    attr_accessible :text 

    has_many :compositions_tags 
    has_many :compositions, :through => :compositions_tags 

    validates_uniqueness_of :tag, only: [:create, :update], message: "already taken" 
end 

class CompositionsTag < ActiveRecord::Base 
    belongs_to :composition 
    belongs_to :tag 
end 

Maintenant, par exemple, je fais

Composition.create(content: "Hello").tags.create(text: "#hi") 

Le résultat serait une composition avec un contenu « Bonjour » et une étiquette avec le texte "#hi" ayant créé.

Ensuite, je crée à nouveau une composition.

Composition.create(content: "Goodmorning") 

Maintenant, ce que je ne sais pas et je voulais faire est associé cela aussi bien à la balise existante avec le texte « #hi ».

Comment le faire de la manière la plus élégante?

Répondre

1

Si vous êtes flexible sur l'ordre dans lequel vous créez vos dossiers, vous pouvez créer la balise, puis créer les deux compositions en une ligne:

Tag.create(text: "#hi").compositions.create([{content: "Goodmorning"},{content: "Hello"}]) 
Questions connexes