2009-02-06 9 views
0

Я использовал эшафот, чтобы создать модель и контроллер. Он работал хорошо. Затем я начал редактировать/удалять некоторые действия с контроллером. Поэтому я сделал участие/новое участие/регистрацию.Маршруты в Ruby On Rails

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

Я также использовал маршруты рейка, в которых участвуют/новые, несмотря на то, что я редактировал имя метода.

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

ответ

0

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

4

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

map.resources :participations 

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

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

Tha должны это сделать.

1

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

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

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

3

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

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

map.resources :participations

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

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

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

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

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

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

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

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

Смежные вопросы