Вопрос

Я застрял на проблеме маршрутизации в приложении Rails 3.0.x.

Чего я пытаюсь достичь, это URL /Регистрация/обновление/1 Анкет Идея состоит в том, что это возобновит регистрацию для участника с ID = 1.

Итак, я настраиваю следующие маршруты

Routes.rb

match "registration/renew" => "registration#renew"

Пользователь прибывает на страницу регистрации по навигационной ссылке, такой как

<%= link_to "Full Member", registration_renew_path(@member)  %>

Проблема в том, что сгенерированная ссылка выходит как: /registration/renew.1 что указывает на то, что расширение формата создается и добавляется. Который затем я попытался сделать необязательным с помощью включения Аргумент респондента: формат Согласно следующему правилу сопоставления

match "registration/renew(/:id(.:format))" => "registration#new"

Но это терпит неудачу с

No route matches {:controller=>"registration", :action=>"renew", :format=>#<Member id: 1,.....

Так что в этот момент я перепроверил направляющие рельсов и т. Д., Но все еще не мог генерировать URL, которого я был после.

Только когда у меня были два правила:

match "registration/renew" => "registration#renew"
match "registration(/:action(/:id(.:format)))" => "registration#renew"

В файле маршрутов будет URL /Регистрация/обновление/1 Получите меня на страницу. Хотя я не чувствовал, что это было правильное, аккуратное решение.

Последний вопрос (ы)

  1. Что должно быть ссылка на метод
  2. Какие правильные маршруты.

Заранее спасибо

Это было полезно?

Решение

Вам просто нужно явно пройти ARGS и определить название этого маршрута

match "registration(/:action(/:id(.:format)))" => "registration#renew", :as => registration_renew

Только с удостоверением личности

<%= link_to "Full Member", registration_renew_path(:id => @member.id)  %>

С идентификатором и форматом

<%= link_to "Full Member", registration_renew_path(:id => @member.id, :format => :xml)  %>

Без идентификатора

<%= link_to "Full Member", registration_renew_path  %>

Вам не нужен маршрут без параметров в вашем примере.

Другие советы

Вы можете упомянуть контроллер и действие в методе link_to

<%=link_to "Full Member", :controller => "registration", :action => "renew", :id => @member.id %> 

Пожалуйста, обратитесь к следующему уроку для получения дополнительных вариантов.

http://api.rubyonrails.org/classes/actionview/helpers/urlhelper.html#method-i-link_to

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top