2012-01-30 115 views
0

幾個月前我接管了一個涉及無限深度的多態關聯的項目..我想了解如何在模型上進行操作。在rails中更新多態關聯

這是模特如何看起來像一個示例:https://gist.github.com/1701475

CallFlow
- RouteByXxxx
---- XxxxOption

實際上有6個協會CallFlow(RouteByXxxx)它們都具有子(ren)XxxxOption是一個選項列表。

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

我最大的問題:我將如何去有關更新中的IvrOption記錄一個target_did時,我只有一個CallFlow相關DNIS?

實際上,關聯看起來像這樣:

CallFlow(routable_type = RouteByMessage)
-RouteByMessage
--MessageOption(target_routable_type = RouteByIvr)
--- RouteByIvr
---- IvrOption( target_routable_type = null,target_did = 1112223333)

回答

1

像這樣的東西應該工作;只要按照協會鏈。這裏沒有檢查nils或任何東西,所以你想補充一點,但這個想法應該保留。

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