Ruby on rails 使用自定义路由渲染操作

Ruby on rails 使用自定义路由渲染操作,ruby-on-rails,Ruby On Rails,当用户注册验证失败时,我试图维护一个漂亮的URL 我有一个如下所示的路由文件: map.resources :users map.signup '/signup', :controller => "users", :action => "new" def create @user = User.new(params[:user]) if @user.save flash[:notice] = "Successfully Registered."

当用户注册验证失败时,我试图维护一个漂亮的URL

我有一个如下所示的路由文件:

map.resources :users
map.signup '/signup', :controller => "users", :action => "new"
def create
    @user = User.new(params[:user])
    if @user.save
       flash[:notice] = "Successfully Registered."
       redirect_to root_url
    else
       render :action => 'new'
    end
end
这已经足够好了,但如果用户在注册期间输入了无效信息,则create方法将执行以下操作:

map.resources :users
map.signup '/signup', :controller => "users", :action => "new"
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。如果我将其切换为重定向到“/signup”,它会工作,但之前输入的所有信息都会丢失,理想情况下,我会保留这些信息

验证失败时,有没有办法保留我的nice URL?

尝试添加到路由:

map.signup_post '/signup', :controller => "users", :action => "create", :method => :post
以您的形式:

<%= form_for @user, :url => signup_post_path do |f| %>
signup_post_path do|f|%>

您需要为路线添加条件:

# 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 %>
#控制器
def新
@user=user.new
结束
def创建
@user=user.new(参数[:user])
如果@user.save
flash[:notice]=“已成功注册。”
将\u重定向到根\u url
其他的
呈现“新”
结束
结束
#new.html.erb
注册路径do |表单|%>
....

感谢您的回复。不幸的是,如果我这样做了,它仍然无法覆盖错误消息和以前的值。我是否正确理解您,当
@user.save
由于验证而失败时,您希望url
domain.com/signup
而不是
domain.com/users/create