Ruby on rails 3.1 没有路由错误,但具有rake路由中的路由

Ruby on rails 3.1 没有路由错误,但具有rake路由中的路由,ruby-on-rails-3.1,routes,Ruby On Rails 3.1,Routes,这是我的路由文件: devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } resources :users do post 'update_and_sign_in', :on => :member end 以下是rake路由的输出: update_and_sign_in_user POST /users/:id/update_a

这是我的路由文件:

  devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

  resources :users do
    post 'update_and_sign_in', :on => :member
  end
以下是rake路由的输出:

update_and_sign_in_user POST   /users/:id/update_and_sign_in(.:format) users#update_and_sign_in
                   users GET    /users(.:format)                        users#index
                         POST   /users(.:format)                        users#create
                new_user GET    /users/new(.:format)                    users#new
               edit_user GET    /users/:id/edit(.:format)               users#edit
                    user GET    /users/:id(.:format)                    users#show
                         PUT    /users/:id(.:format)                    users#update
                         DELETE /users/:id(.:format)                    users#destroy
这是控制器:

  def update_and_sign_in
     @user = User.find(params[:id])
     if  @user.update_attributes(params[:user])
       redirect_to root_path, :notice => "You have successfully signed up"
     else
       render 'get_email' 
     end
  end
表格如下:

=form_for(@user,:url => update_and_sign_in_user,:method => "put", :html => {:class => 'well'}) do |f|
我发现了这个错误,但我不知道为什么或如何修复它:

No route matches {:action=>"update_and_sign_in", :controller=>"users"}

您的路线是一个POST,但您在表单中的方法被放置。

只是为了澄清:哪个控制器是:

    def update_and_sign_in
      @user = User.find(params[:id])
      if  @user.update_attributes(params[:user])
        redirect_to root_path, :notice => "You have successfully signed up"
      else
       render 'get_email' 
      end
    end
上?UsersController或Users::OmniAuthCallbackController