2010-08-27 13 views
3

Les meilleures pratiques pour ce qui suit ?:rails: créer Parent, si n'existe pas, whilte créer enfant enregistrement

J'ai modèle du fabricant qui has_many Inventaire

Dans ma nouvelle forme d'inventaire Je veux un champ que les cartes à Manufacturer.name de sorte que lorsque l'on soumet le nouvel inventaire forment l'application:

  • recherches pour un fabricant avec le « nom » de la forme
    • si elle existe, affectez l'ID à @ inventory.manufacturer_id et enregistrez @inventory
    • si elle n'existe pas, créez le fabricant avec le 'nom' dans le formulaire, affectez l'ID à @ inventory.manufacturer_id et enregistrez
    • ont des validations travaillent sur le nouvel inventaire sous forme
      • de telle sorte que, si le formulaire d'inventaire validation échoue sur un terrain autre que « nom »
        • le champ « nom » sera repeuplée avec quel que soit le utilisateur entré (mais un nouveau fabricant n'est créé que si le formulaire passe idation)

Répondre

3

Vous pouvez essayer comme ceci:

class Inventory < ActiveRecord::Base 

    ... 

    belongs_to :manufacturer 

    ... 

    def manufacturer_name 
    manufacturer && manufacturer.name 
    end 

    def manufacturer_name=(value) 
    self.manufacturer = Manufacturer.find_by_name(value) 
    self.manufacturer ||= Manufacturer.new(:name => value) 
    end 

    ... 

end 

Dans ce cas, vous devriez sortie champ de texte manufacturer_name sur le formulaire d'inventaire.

+0

de peur - c'est lookin bon !! Je vais mettre en œuvre demain et revenir. Merci! – telecasterrok