2012-12-17 59 views
0

我無法弄清楚爲什麼這發生在邁克爾哈特爾教程磕磕絆絆之後。令人困惑的軌道路線

當我點擊提交表單,並期望失敗,渲染後預期的網址應該是「/註冊」,但由於某種原因它是'/用戶

這是我的控制器

def new 
    @user = User.new 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     redirect_to @user 
    else 
     render 'new' 
    end 

這我的路線

resources :users 
match '/signup', to: 'users#new' 

首先,當我點擊註冊鏈接的URL是

http://localhost:3000/signup 

然後submisson失敗這個網址是

http://localhost:3000/users 

任何人都可以解釋我爲什麼會發生?謝謝

回答

2

當您發佈到UsersController(通過註冊操作創建新用戶)時,您正在調用#create操作。如果您在該頁面上查看源代碼,則會看到表單操作爲/users,表單方法爲POST。因此,當您提交表單時,請求是:

POST /users 
(some data) 

如果保存失敗,那麼您的創建操作只會呈現「新」模板。你不會被重定向到任何地方。 render :action => "new"只是呈現new動作的模板 - 它實際上不會重定向到新動作或運行其動作代碼。

0

根據routes.rb在rails中的使用情況,您的routes.rb文件中的match標記確定在匹配時要達到哪個controller/action

因此,在這裏,您的註冊網址與user控制器 - >new操作相匹配。但是,如果new操作失敗,則url爲NOT /註冊,但user控制器的new函數取而代之。所以url顯示就像那樣。希望我說得更清楚些。