2011-09-23 150 views
1

对于Rails来说,我还是一个新手,并且很难理解Rails中路径系统是如何工作的。Rails渲染路径路径

在我的routes.rb我创建别名为注册:

match 'signup' => 'user#new' 
resource :user, :controller => 'user' 

的作用是存在的,要去/注册显示正确的行动。到现在为止还挺好。

现在,当我提交我的注册表单时,它像往常一样运行POST的创建操作。这里是我卡住的地方。

如果注册失败,我想再次向用户显示注册表单。一种选择是做一个“新的”渲染,但是这需要用户/用户而不是/注册。

UserController的

class UserController < ApplicationController 

    def new 
    @user = User.new 
    end 


    def create 

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

    if @user.save 
     redirect_to root_url 
    else 
     render "new" 
    end 

    end 

end 

任何帮助表示赞赏!

更新 - 发现的解决方案

新增2比赛路线为/注册,使用:通过选项

match 'signup' => 'user#new', :as => :signup, :via => 'get' 
match 'signup' => 'user#create', :as => :signup, :via => 'post' 

这样的应用程序知道张贴到时/注册它应该运行的创建动作,并且当http方法得到时,它使用新的动作。

控制器标记与上面发布的相同。

回答

0

尝试添加 “:as” 给你的路线是这样的:

match 'signup' => 'user#new', :as => :signup 

,然后做

redirect_to signup_url 

在你的控制器。

这对我有用。我仍然不知道为什么。也许别人有解释。

+0

嗨Hiasinho,谢谢你的回答。这将在重定向到注册时起作用。但是,我想保留用户对象,以便预先填写表单。然而你的回答让我朝着正确的方向前进。我添加结果。 –