Рендеринг действий с помощью пользовательских маршрутов - PullRequest
1 голос
/ 05 февраля 2010

Я пытаюсь сохранить красивый URL при регистрации пользователя с неудачной проверкой

У меня есть файл маршрутов, который выглядит следующим образом:

map.resources :users
map.signup '/signup', :controller => "users", :action => "new"

Это работает достаточно хорошо, за исключением того, что если пользователь вводит неверную информацию во время регистрации, то метод create делает следующее:

def create
    @user = User.new(params[:user])
    if @user.save
       flash[:notice] = "Successfully Registered."
       redirect_to root_url
    else
       render :action => 'new'
    end
end

Это работает, но если информация верна, он переключает URL на domain.com/users. Если я переключу его на redirect_to '/ signup', он будет работать, но вся предыдущая информация, которая была введена, будет потеряна, и в идеале я хотел бы сохранить это.

Есть ли способ сохранить мои хорошие URL-адреса во время неудачной проверки?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2010

Вам нужно будет добавить условия к вашим маршрутам:

# Routes files
map.resources :users

map.signup "/signup", :controller => "users", :action => "new", :conditions => { :method => :get }
map.signup "/signup", :controller => "users", :action => "create", :conditions => { :method => :post }

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

# Controller
def new
  @user = User.new
end

def create
  @user = User.new(params[:user])

  if @user.save
    flash[:notice] = "Successfully registered."
    redirect_to root_url
  else
    render "new"
  end
end

# new.html.erb
<% form_for @user, :url => signup_path do |form| %>
   ....
<% end %>
0 голосов
/ 06 февраля 2010

Попробуйте добавить к маршрутам:

map.signup_post '/signup', :controller => "users", :action => "create", :method => :post

И в вашей форме:

<%= form_for @user, :url => signup_post_path do |f| %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...