2010-11-03 5 views
0

Ceci est pour une question Rails. Puisque mon Sphinx de pensée ne pouvait pas indexer le modèle A associé, je suis à la recherche d'une solution temporaire.Ajouter les colonnes multiples du modèle A à une colonne du modèle B lors de la création, mise à jour

Modèle A: colonnes -Est: nom, ville

Modèle B: modèle -has_many A de colonne -Est: pays -Je veux ajouter une colonne appelée "tag" dans le modèle B

Disons que nous avons:

B1 - Etats-Unis d'Amérique (: pays) et A1 et A2 A1 - Walmart (: nom), New York (: ville) A2 - Starbucks (: nom), San Francisco (: city)

Everytime lorsque l'utilisateur crée/mises à jour liste B1, le A.name et A.city: - chaque A cartographié, ajouté à la B.tag, joignez-vous ('') - puis enregistrez

donc dans l'exemple ci-dessus, B1.tag aura: walmart, New york, starbucks, san francisco

alors je peux mettre cela dans le modèle B:

class B < ActiveRecord::Base 
    has_many :as  # plural for A's 

# ThinkingSphinx Index 
    define_index do 
    indexes :country 
    indexes :tag 
    end 

end 

Je n'ai pas ajouté la colonne Tag dans mon B encore.

Comment est-ce que j'écris ceci dans mon contrôleur B de sorte que chaque fois qu'il est créé/sauvé, il mappera automatiquement chaque A, puis joindra (',') le A.name et A.city dans B.tag? Désolé, je suis juste en train d'apprendre les rails.

Merci.

Répondre

0

Utilisez un observateur (http://api.rubyonrails.org/classes/ActiveRecord/Observer.html) pour exécuter le code after_create sur votre modèle A. Il suffit ensuite de localiser les nouvelles valeurs et de les ajouter à votre modèle B.

Questions connexes