Полиморфные URL с единичными ресурсами - PullRequest
3 голосов
/ 11 марта 2011

Я получаю странный вывод при использовании следующей настройки маршрутизации:

  resources :warranty_types do
    resources :decisions
  end
  resource :warranty_review, :only => [] do
    resources :decisions
  end

У меня есть много типов Гарантия_, но только один вид гарантии (таким образом, единственная декларация маршрута). Решения полиморфно связаны с обоими. У меня есть только один контроллер решений и один частичный _form.html.haml для отображения формы решения.

Это код вида:

= simple_form_for @decision, :url => [@decision_tree_owner, @decision.becomes(Decision)] do |form|

URL-адрес гарантированного типа выглядит следующим образом (для нового решения):

/warranty_types/2/decisions

тогда как URL-адрес гарантированного_просмотра выглядит так:

/admin/warranty_review/decisions.1

Я думаю, потому что id гарантии_review некуда деваться, он просто добавляется в конец как расширение.

Может кто-нибудь объяснить, что здесь происходит и как я могу это исправить?

Я могу обойти это, пытаясь определить класс Guarantion_review и заменив @decision_tree_owner на: гарантированный_результат, и это генерирует правильный URL, но это грязно. Я бы подумал, что маршрутизация будет достаточно умной, чтобы понять, что Guarantee_review является единственным ресурсом и, следовательно, отбросить идентификатор из URL.

Кстати, это Rails 3:)

1 Ответ

2 голосов
/ 12 марта 2011

Очевидно, что это давняя ошибка рельсов, когда polymorphic_url не может узнать, является ли ресурс единичным или нет в настройках маршрутов:

https://rails.lighthouseapp.com/projects/8994/tickets/4077-wrong-redirect-after-creation-of-nested-singleton-resource-using-responder

Я просто собираюсь прибегнуть к не-единственному маршруту, хотя будет только один гарантийный обзор. Это просто эстетика в конце дня.

...