Маршруты в Ruby On Rails - PullRequest
       14

Маршруты в Ruby On Rails

0 голосов
/ 06 февраля 2009

Я использовал скаффолд для создания модели и контроллера. Это сработало хорошо. Затем я начал редактировать / удалять некоторые действия контроллера. Итак, я сделал участие / новый> участие / регистрация.

Это не работает, оно говорит "Неизвестное действие", но оно говорит, что имеет регистрацию действия. Забавно, если я захожу в «Участие / регистрация» с использованием заглавной буквы P. Тогда это сработает!

Я также делал маршруты Rake, где по-прежнему отображаются участия / новые, хотя я редактировал имя метода.

Есть ли что-то особенное, что мне нужно сделать, чтобы определить действия?

Ответы [ 4 ]

4 голосов
/ 06 февраля 2009

Вам также нужно отредактировать файл config / rout.rb и сообщить Rails, как он должен обрабатывать маршрут участия / регистрации. В вашем файле rout.rb должно быть что-то вроде:

map.resources :participations

для этого вам нужно будет добавить новое правило:

map.signup '/participations/signup', :controller => 'participations', :action => 'new'

Так и должно быть.

3 голосов
/ 06 февраля 2009

Если вы используете ресурсы, это легко исправить.

то есть, если у вас есть

map.resources :participations

и вы не хотите использовать именованные маршруты, как предлагают другие ответы, у вас есть следующие опции:

  • Для изменения / участия / нового на / участники / регистрация, но все же сохранить новое как действие в Контроллер

    map.resources :participations, :path_names => {:new => 'signup'}

  • Для использования / участия / регистрации и регистрации действия в контроллере:

    map.resources :participations, :collection => {:signup => [:get, :post]}

Если вы также хотите ограничить, чтобы они не могли использовать действие / Participations / New, добавьте :except => :new к приведенному выше утверждению

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

Просто имейте в виду, что routs.rb читается сверху вниз, поэтому будет использоваться первый соответствующий маршрут.

1 голос
/ 06 февраля 2009

Нет ничего необычного в том, чтобы поддерживать стандартные маршруты RESTful и действия контроллера и отображать на них удобные альтернативные пути. Например, в вашем случае:

map.signup '/signup', :controller => 'participations', :action => 'new'

Ваши пользователи смогут получить доступ к participations#new по очень удобному URL http://foo.com/signup (если, конечно, ваш сайт был на foo.com). В ваших контроллерах и представлениях вы бы назвали этот маршрут signup_path или signup_url.

0 голосов
/ 06 февраля 2009

Если я правильно помню, RoR чувствителен к регистру, поэтому убедитесь, что ваш контроллер начинается со строчной буквы "p", а любые действия также начинаются со строчной буквы. попробуй

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