Rails Active Record多态嵌套资源导航

时间:2011-07-06 11:04:04

标签: ruby-on-rails activerecord navigation polymorphism associations

我遇到了一个问题,不知道如何绕过它。

我们的数据模型中有许多多态嵌套资源,例如:

目的地>住宿>地址

目的地>吸引力>地址

因此可以从多个父母到达地址控制器。我需要能够正确地关联它们,并且还要导航回父母的树。

在这些情况下,地址是相同的模型,所以我的第一个解决方案 这是为了在routes文件中创建嵌套资源。 然后我们也开始使用这种嵌套来提供面包屑 导航的东西,所以当我们的URL得到这样的时候:

本地主机:3000 /目的地/ 1 /住宿/ 3 /地址/新

我们可以将其拆分并使用它导航回任何级别的路径。

我也是,为了使控制器通用,我使用嵌套资源 找出map的父资源是什么,所以控制器看起来 像这样:

def new
     @parent = find_parent_model

     if !@parent.nil?
     @destination = @parent.destinations.new

[...]

def find_parent
   params.each do |name, value|
     if name =~ /(.+)_id$/
       return $1.classify.constantize.find(value)
     end
   end
   nil
 end

这很有效。但问题是我们在routes.rb文件中有1800行嵌套资源,现在它需要rails应用程序大约5分钟才能启动,它就坐了 那里使用500MB的ram。 :S

有没有人知道这种做法不那么疯狂?

1 个答案:

答案 0 :(得分:3)

您可能希望放弃使用嵌套资源语法进行路由。

这样的单一路线
get 'destinations/:destination_id/:parent_type/:parent_id/address/new' => 'address#new'

会匹配所有资源,而AddressController#new则可以

@parent = params[:parent_type].constantize.find(params[:parent_id])

您可能还想检查@parent之后是否属于预期类型之一。