2012-01-30 4 views
0

J'ai repris un projet il y a plusieurs mois qui impliquait des associations polymorphes infiniment profondes ... et j'aimerais obtenir de l'aide pour comprendre comment fonctionner sur les modèles.Mise à jour d'une association polymorphe dans les rails

Ceci est un exemple de la façon dont les modèles ressemblent: https://gist.github.com/1701475


flux d'appels - RouteByXxxx
---- XxxxOption

Il y a effectivement 6 associations à flux d'appels (RouteByXxxx) qui ont tous le (s) enfant (s) XxxxOption qui est une liste d'options.

schema.rb: https://gist.github.com/1701475

Ma plus grande question: comment pourrais-je aller sur la mise à jour du target_did dans l'un des dossiers de IvrOption quand je ne le SINC associé à un flux d'appels?

De façon réaliste, une association ressemble à ceci:

flux d'appels (routable_type = RouteByMessage)
-RouteByMessage
--MessageOption (target_routable_type = RouteByIvr)
--- RouteByIvr ----
IvrOption (target_routable_type = null, target_did = 1112223333)

Répondre

1

Quelque chose comme ceci devrait fonctionner; il suffit de suivre la chaîne d'association. Il n'y a pas de vérification pour nils ou quoi que ce soit ici, donc vous voudriez ajouter cela, mais l'idée devrait tenir.

call_flow = CallFlow.find_by_dnis(params[:dnis]) 
target_routable = call_flow.routable.options.first(:conditions => ["target_routable_type = ?", 'route_by_ivr'] 
ivr_option = target_routable.options.find(:conditions => (whatever)) 
ivr_option.update_attributes :target_did => 112233 
Questions connexes