2011-10-10 96 views
0

如何從控制器正確渲染名爲路徑的導軌?渲染導軌名爲路由

的routes.rb:

get "logout" => "sessions#destroy", :as => "logout" 
get "login" => "sessions#new", :as => "login" 
get "signup" => "users#new", :as => "signup" 

root :to => "home#index" 

resources :users 
resources :sessions 
resources :likes 

user_controller.rb:

def new 
    @user = User.new 
end 

def create 
    @user = User.new params[:user] 
    if @user.save 
    login(params[:user][:email], params[:user][:password]) 
    redirect_to root_url, :notice => "Welcome! You have signed up successfully." 
    else 
    render :new 
    end 
end 

問題是:在註冊頁面上/signup和當@user數據沒有填寫正確和render :new被稱爲,而不是去url /signup它去/users。我會使用redirect_to但id寧願不要,因爲我想保存在頁面上的錯誤告訴用戶哪些數據沒有提供。後

更新添加match "signup" => "users#create", :via => "post"

root   /       {:controller=>"home", :action=>"index"} 
users  GET /users(.:format)    {:action=>"index", :controller=>"users"} 
      POST /users(.:format)    {:action=>"create", :controller=>"users"} 
edit_user GET /users/:id/edit(.:format) {:action=>"edit", :controller=>"users"} 
user  GET /users/:id(.:format)   {:action=>"show", :controller=>"users"} 
      PUT /users/:id(.:format)   {:action=>"update", :controller=>"users"} 
      DELETE /users/:id(.:format)   {:action=>"destroy", :controller=>"users"} 
signup GET /signup(.:format)   {:action=>"new", :controller=>"users"} 
      POST /signup(.:format)   {:action=>"create", :controller=>"users"} 

感謝

+0

這很正常,因爲它呈現用戶的新方法。那有什麼問題? – damienbrz

+0

理想情況下,我希望URL保持/註冊,而不是/用戶 – GTDev

+0

好,所以看看Joel Friedlaender的回答。但是如果你看看REST,你得到/用戶/新的,當你創建POST /用戶時,但是如果它有任何錯誤,它會呈現:URL /用戶新。 – damienbrz

回答

1

添加這條路線也:

match "signup" => "users#create", :via => "post" 
+0

沒有用,我需要在任何地方改變控制器? – GTDev

+0

你的「新」方法在你的控制器中看起來像什麼,或許用它更新你的問題? –

+0

進一步看,它看起來像您的資源:用戶可能會覆蓋早期的路線。我想如果你刪除了它會起作用。如果是這種情況,可以將其更改爲「resources:users,:except =>:new」 –

1

的routes.rb您可以添加

get "signup", to: "users#new" 
post "signup", to: "users#create" 
put "signup", to: "users#update" 

而且在註冊形式 - 檢查signup_path

form_for(resource, as: resource_name, url: signup_path, html: {method: 'post'}) 

對於其它讀物誰使用devise_for:用戶,可以定義路線爲:

devise_scope :user do 
    get "signup", to: "devise/registrations#new" 
    post "signup", to: "devise/registrations#create" 
    put "signup", to: "devise/registrations#update" 
end 

和登記形式如上所述的

通過添加此路由,您可以使用您的命名路由(如註冊,註冊),即使在用戶填寫註冊表單時出現了一些錯誤。