Rails, RESTful маршрутизация и плюрализация - PullRequest
2 голосов
/ 09 июля 2009

Я борюсь с множественным созданием маршрута RESTful в Rails 2.3.2.

В частности, у меня есть ресурс с именем sitestatus. Этот ресурс действительно неисчислим (олень - это олень, а не олень). Когда я определяю его как неисчисляемое в инициализаторе, я получаю несколько помощников, но sitestatuses_path недоступен (что имеет смысл).

Итак, жестом соответствия я позволил sitestatus быть исчисляемым. Так что теперь, Rails множит sitestatus до sitestatuses (не слишком ужасно), но настаивает на также , преобразуя его в sitestatu (пропуская 's', смешно и ужасно одновременно) .

Итак, я вынул свой большой молоток и добавил этот код в инициализатор:

ActiveSupport::Inflector.inflections do |inflect|
  inflect.plural "sitestatus", "sitestatuses"
  inflect.singular "sitestatus", "sitestatus"
end

(Примечание: я пытался использовать irregular, и он не работал правильно)

Выполнение этого дает мне ожидаемые результаты в консоли, когда я "sitestatus".pluralize, но когда я пытаюсь позвонить на sitestatuses_path, на мой взгляд, я получаю

undefined local variable or method 'sitestatuses_path'

Когда я загружаю ActionController :: UrlHelper в консоль и вызываю sitestatus_path(123), я получаю sitestatus/123, как и следовало ожидать. Однако, когда я звоню sitestatuses_path, я получаю

undefined method 'sitestatuses_path' for #<Object...

Это имя - название модели и контроллера, и оно действительно является единственным логическим именем для обоих, поскольку оно идеально совпадает с бизнес-именем объекта.

Что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 10 июля 2009

Хорошо, как оказалось, мне не нужно было использовать инфлектор. Rails уже правильно делал со словом sitestatus.

Была пара проблем и пара решений, которые мне нужно было использовать.

Проблема 1: я использовал map.resources :sitestatus, а не map.resources :sitestatuses. Буквы "s" в конце слова заставляли Rails думать, что оно уже было множественным, как и должно быть. Таким образом смешные sitestatu_path помощники.

Решение: Pluralize: sitestatus to: sitestatus.

Это создало две проблемы:

Проблема A: Rails теперь предполагал, что контроллер назван «Sitestatuses», а это не так. Решение A: Используйте :controller hash_hey, предоставленный маршрутизатором Rails, чтобы переименовать контроллер.

Проблема B: Rails предполагал, что сгенерированный путь URL должен быть /sitestatuses, чего не должно быть. Решение B. Используйте :as hash_key для переименования сгенерированного URL.

Теперь все работает отлично.

1 голос
/ 10 июля 2009

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

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