Rails Active Record Полиморфная навигация по вложенным ресурсам - PullRequest
2 голосов
/ 06 июля 2011

Я столкнулся с небольшой проблемой и не уверен, как ее обойти.

У нас есть ряд полиморфных вложенных ресурсов в нашей модели данных, например:

Назначение>Размещение> Адрес

Пункт назначения> Достопримечательности> Адрес

Таким образом, к контроллеру адресов можно прийти от нескольких родителей.Мне нужно иметь возможность правильно связать их, а также выполнить навигацию по дереву родителей.

Адрес - это та же модель в этих случаях, поэтому мое первое решение для этого было создать вложенные ресурсы в файле маршрутов.Затем мы также начали использовать это вложение, чтобы обеспечить навигацию в виде хлебных крошек, поэтому, когда наши URL-адреса выглядят так:

localhost: 3000 / Destination / 1 / размещения / 3 / address / new

Мы можем разделить его и использовать для перехода назад по пути к любому уровню.

Я также, чтобы сделать контроллер универсальным, я использую вложенные ресурсы, чтобы выяснить, каков родительский ресурс для карты, поэтомуконтроллер выглядит так:

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

Это работает.Но проблема в том, что у нас есть 1800 строк вложенных ресурсов в файле rout.rb, и теперь для запуска приложения rails требуется около 5 минут, и оно находится там, используя 500 МБ ОЗУ.: S

Кто-нибудь знает менее безумный способ сделать это?

1 Ответ

3 голосов
/ 14 августа 2011

Возможно, вы захотите отказаться от использования синтаксиса вложенных ресурсов для маршрутизации.

Один маршрут типа

get 'destinations/:destination_id/:parent_type/:parent_id/address/new' => 'address#new'

будет соответствовать всем ресурсам, а в AddressController#new вы можете иметь

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

Вы также можете проверить, что @parent относится к одному из ожидаемых типов впоследствии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...