2011-02-24 3 views
2

Je suis nouveau sur les rails et je m'excuse si c'est une question n00b.has_many accepte_nested_attributes_for la question d'association

Je crée le site de gestion de recette obligatoire et je souhaite que chaque recette ait une liste de balises (où la balise db contient juste une chaîne appelée "nom"). Voici mes modèles pour vous donner un peu de contexte:

class Recipe < ActiveRecord::Base 
    has_many :links 
    has_many :tags, :through => :links 
    validates :name, :ingredients, :directions, :presence => true 
    accepts_nested_attributes_for :tags, 
     :allow_destroy => true, 
     :reject_if => :reject_tag 

    def reject_tag(a) 
     ... 
    end 
end 

class Tag < ActiveRecord::Base 
    has_many :links 
    has_many :recipes, :through => :links 
end 


class Link < ActiveRecord::Base 
    belongs_to :recipe 
    belongs_to :tag 
end 

Fondamentalement, chaque recette a une liste de balises à travers la table de connecteur de liaison et vice versa. Le formulaire de recette accepte les attributs imbriqués pour les balises. Le comportement que je souhaite est que les balises dupliquées ne soient pas entrées dans la table des balises, mais qu'un nouveau lien pointant vers la balise existante soit créé. Donc, si j'ai une étiquette avec le nom «sain» et entrez une nouvelle recette et ajoutez l'étiquette «saine» à elle je ne veux pas que les étiquettes «saines» en double dans la table d'étiquette. Tout ce qui est nécessaire est une nouvelle entrée dans la table de lien reliant la nouvelle recette à l'ancienne étiquette.

Quelle est l'approche «rails» pour ce faire. En ce moment j'essaie de le pirater en passant le recipe_id dans un champ de saisie caché dans: reject_if lambda et enregistrez un nouveau lien là. Cela fonctionne pour éditer une recette existante, mais pas pour en créer une nouvelle, puisqu'il n'y a pas encore de recette. Id. Cela ressemble à une mauvaise approche et je ne suis pas sûr de savoir comment s'y prendre. Toute aide est appréciée.

Répondre

0

Pouvez-vous vérifier la conception de votre modèle? Recette et Tag semble avoir une relation HABTM par lien au lieu de has_many dans les deux sens. Une fois que vous avez cela, le problème de duplication devrait être résolu/facile à résoudre.

+0

Merci pour la réponse, mais je ne suis pas sûr que je vous comprends bien. Chaque recette peut avoir plusieurs étiquettes et chaque étiquette peut appartenir à plusieurs recettes. Est-ce que je modélise implicitement cela comme HABTM? Qu'entendez-vous par «has_many» des deux côtés? – danh32

Questions connexes