0

我一直在處理我的應用程序,其中我有許多角色和一些用戶。無法在Rails中使用Devise和CanCan進行sign_up

但是突然間我無法再註冊了。登錄精品工程,但始終簽署了重定向我回到了簽字頁,併產生了同樣的錯誤:

enter image description here

控制檯總是顯示下面當我嘗試註冊:

Started POST "/registers/user/registration" for 127.0.0.1 at 2013-04-18 00:48:22 +0100 
Processing by RegistersController#registration as HTML 
    Parameters: {"utf8"=>"✓",  "authenticity_token"=>"ofucDxxzZFbTVLfVaA3QxixOHL2V9hzxfSFU/99Pd60=", "user"=>{"name"=>"Omar Arroum", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up", "id"=>"user"} 
Completed 401 Unauthorized in 1ms 

Started GET "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2013-04-18 00:48:22 +0100 
Processing by Devise::SessionsController#new as HTML 
    Rendered devise/shared/_links.html.erb (0.4ms) 
    Rendered devise/sessions/new.html.erb within layouts/application (9.8ms) 
    Rendered layouts/_navigation.html.erb (1.3ms) 
    Rendered layouts/_messages.html.erb (0.1ms) 
Completed 200 OK in 63ms (Views: 61.6ms | ActiveRecord: 0.0ms) 

我還沒有作出了`user_controller.rb任何改變,所以不知道是什麼原因造成這個問題

編輯:增加了RegistersController

class RegistersController < ApplicationController 
    #before_filter :authenticate_user! 
    load_and_authorize_resource 

    # GET /registers 
    # GET /registers.json 
    def index 
    @registers = Register.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @registers } 
    end 
    end 

    # GET /registers/1 
    # GET /registers/1.json 
    def show 
    @register = Register.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @register } 
    end 
    end 

    # GET /registers/new 
    # GET /registers/new.json 
    def new 
    @register = Register.new(:event_id => params[:event_id]) 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @register } 
    end 
    end 

    # GET /registers/1/edit 
    def edit 
    @register = Register.find(params[:id]) 
    end 

    # POST /registers 
    # POST /registers.json 
    def create 
    @register = Register.new(params[:register]) 

    respond_to do |format| 
     if @register.save 
     format.html { redirect_to @register, notice: 'Register was successfully created.' } 
     format.json { render json: @register, status: :created, location: @register } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @register.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /registers/1 
    # PUT /registers/1.json 
    def update 
    @register = Register.find(params[:id]) 

    StudentRegister.find_all_by_register_id(@register).each do |streg| 
     streg.update_attributes(:present => false, :late => false) 
     #sets the users status as being absent, mainly for the purpose of when copying a new register, 
     #as the presence and lateness is otherwise maintained 
    end 

    respond_to do |format| 
     if @register.update_attributes(params[:register]) 
     format.html { redirect_to @register, notice: 'Register was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @register.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /registers/1 
    # DELETE /registers/1.json 
    def destroy 
    @register = Register.find(params[:id]) 
    @register.students.delete_all_on_destroy 
    @register.destroy 

    respond_to do |format| 
     format.html { redirect_to registers_url } 
     format.json { head :no_content } 
    end 
    end 

    def registration 
    @studentregister = StudentRegister.find_all_by_register_id(params[:id]) 

    end 

    def copy 
    @register = Register.find(params[:id]).amoeba_dup #Creates a duplicate of the existing register with all Students in it 
    @register.date = Date.today #Sets the registers date to today's date 
    @register.save 

    respond_to do |format| 
     format.html { redirect_to edit_register_path(@register) } #Redirects to the edit page so that they can make any updates 
     format.json { head :no_content } 
    end 
    end 
end 

回答

0

您在RegistersController中(很有可能)正在做before_filter :authenticate_user!。這是什麼產生了401響應和那個Devise的閃光消息。 CanCan應該與它無關。發佈您的RegistersController。

+0

奇怪的是,爲什麼它試圖使用'RegistersController'? 'Register'是我自己的模型,不是Devise的模型,所以不知道爲什麼會這樣。我會爲你更新以查看我的'RegisterController' – omarArroum

+0

您可以在路由中的'devise_for'方法中自定義您的表單以使用您自己的控制器,或者您擁有':controllers => {:registrations =>'registers'}'' .RB。 –

+0

我的'routes.rb'使用默認的'devise_for:users resources:users'方法。問題是,爲什麼當這是註冊階段時它試圖訪問RegistersController? – omarArroum

0

好吧,找出問題所在。

由於這樣的事實,我有一個名爲Registration.html.erb文件和動作名稱registration我的路線是這樣的:

match 'registers/:id/registration' => 'registers#registration', :as => 'registration' #Route for taking the register 

問題是,設計在內部使用這個動作的名字,所以我的代碼是被錯誤路由。

爲了解決這個問題,我改變了命名registration一切take_register,像這樣:

match 'registers/:id/take_register' => 'registers#take_register', :as => 'take_register' #Route for taking the register 

該訣竅對我來說,現在一切工作

相關問題