在rails中更新多态关联

时间:2012-01-30 00:40:20

标签: ruby-on-rails ruby activerecord

几个月前,我接手了一个涉及无限深层的多态关联的项目。我想了解如何操作模型。

这是模型外观的示例:https://gist.github.com/1701475

CallFlow
- RouteByXxxx
---- XxxxOption

实际上有6个与CallFlow(RouteByXxxx)的关联,它们都有子(ren)XxxxOption,这是一个选项列表。

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

我最大的问题是:当我只有一个与CallFlow相关联的DNIS时,我将如何更新其中一个IvrOption记录中的target_did?

实际上,协会看起来像这样:

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

1 个答案:

答案 0 :(得分: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