2011-12-07 6 views
0

У меня есть небольшое приложение, в котором индексная страница представляет собой форму, которая инструктирует пользователя об их электронной почте, я изменил маршрут, чтобы root_path был «новым» ', которое оказывает мою форму:Rails 3 'новое' действие как индексная страница из-за формы

Oa::Application.routes.draw do 
    resources :signups 
    match "/confirm", :to => "pages#confirm" 
    root :to => 'signups#new' 
end 

Это нормально работает, когда я отправляю форму, она отлично работает. Когда я отправляю на корневую страницу и вызываю ошибку проверки, адресная строка имеет адрес localhost: 3000/signups и показывает мне мои ошибки проверки, что тоже хорошо, но если бы я вручную посетил http://localhost:3000/signups, это дало мне ошибку «The для «RegistrationsController» невозможно найти «индекс». Было бы хорошо, если бы я создал действие «index» и redirect_to root_path, чтобы я не получил «Индекс действия» не найден для RegistrationsController, если бы я сразу получил доступ к http://localhost:3000/signups? Это правильный способ сделать это?

class SignupsController < ApplicationController 
    def index 
    redirect_to root_path 
    end 

    def new 
    @signup = Signup.new 
    end 

    def create 
@signup = Signup.new(params[:signup]) 
if @signup.save 
     UserMailer.registration_confirmation(@signup).deliver 
    flash[:notice] = "Signup created successfully." 
    redirect_to confirm_path 
else 
    render :action => "new" 
    end 
    end 
end 

Спасибо!

J

ответ

1

ли что-то вроде этого:

post '/' => 'signups#create' 
root to: 'signups#new' 

Не используйте resources :signups

+0

Delba, Это дает мне ошибку Нет совпадений маршрутов [GET] "/". Кроме того, почему я не должен использовать ресурсы? Я планирую добавить другие действия здесь позже. – JeffC

+0

Вы уверены? Или 'root: to => 'signups # new''. Я собираюсь обновить свой ответ, почему вы не должны использовать ресурсы в этом случае – Damien

+0

Ах да, это работает, root: to => 'signups # new' Я сделал опечатку. Так почему я не должен использовать ресурсы? – JeffC

1

Причина, по которой http://localhost:3000/signups дает мне ошибку " 'Индекс' Действие не может быть найдено для SignupsController" потому что:

Используются первые «согласованные» маршруты.
Так что все это:

match "/confirm", :to => "pages#confirm" 
root :to => 'signups#new' 

игнорируется URL/Signups, потому что он получает дело с помощью

ресурсов: подписок

, который создает все маршруты - индекс, шоу, создавать, new, edit, update, destroy

и когда используется «signups», это подразумевает действие индекса регистрации.

Попробуйте удалить его и/или прочитать на RESTful routes в рельсах и применить это.

+0

Да, имеет смысл также. – JeffC

+0

полезно? если это так, вы можете возразить :) –

+0

Да, спасибо, забыл upvote :) – JeffC

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