2013-03-25 3 views
0

Я играю с Rails 4 в тестовом приложении. У меня есть произвольный URL, который не является стандартным, как URL-адрес resources :foo. В идеале конечный результат я хотел бы, чтобы быть в состоянии пойти:Именованный маршрут в Rails 4

/contests/:id/enter

В взглядов, было бы замечательно, если я могу затем установить связь с использованием имени помощника, таких как:

edit_contests_enter(:id)?

Что было бы лучшим способом определить маршрут выше, чтобы я мог использовать вспомогательный путь с произвольным URL-адресом, подобным приведенному выше? Это необязательно должно быть edit_contests_enter(:id), но пока вспомогательный путь ведет к URL-адресу, как было предложено выше, это было бы фантастически.

ответ

3

Я предполагаю, что ваш конкурс является ресурсом, и когда ваш посетитель отправляется в /contests/:id/enter, вы хотите, чтобы они создали объект user <=> contest. Назовем это participation.

Теперь participation это так же, как и любой другой ресурс в вашем приложении Rails, так что вы хотите иметь routes.rb файл выглядит как

resources :contests do 
    resources :participations 
end 

Вы не хотите, чтобы люди ничего другого, кроме создания участия, как редактировать или уничтожать их. И, возможно, вам нужен хороший URI, например, /contests/:id/enter. Все, что вам нужно сделать, это

resources :contests do 
    resources :participations, :only => [:new, :create] 
    get "enter" => "participations#new" 
end 

Выполнения таким даст вам помощник маршрутов по имени contest_enter. В вашей форме participations#new вы получите POST, как обычно, до /contests/:id/participations.

2

Если у вас есть resources блока для :contests, вы могли бы просто определить новый «член» маршрут на ContestsController с помощью:

resources :contests do 
    member do 
    get :enter 
    end 
end 

И это будет автоматически генерировать вам имя member route, имя которого можно найти, запустив rake routes.

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