2011-10-10 56 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 

和登记形式如上所述的

通过添加此路由,您可以使用您的命名路由(如注册,注册),即使在用户填写注册表单时出现了一些错误。