2016-05-26 56 views
0

我是一個Rails初學者,我正在嘗試使用創建用戶所創建的數據庫的註冊頁面創建一個站點。我正確安裝了設計(看起來),並且在創建第一個用戶來測試它之後,一切似乎都奏效了。但是,如果我嘗試創建另一個用戶,它不起作用。在頁面上點擊創建用戶後,它會返回到首頁,沒有任何錯誤或任何內容。但是,當我檢查我的數據庫中的用戶表,我可以看到用戶沒有創建。用Rails設計不能正確創建用戶

當我將第一個用戶標識(主鍵)從2更改爲1時,我得到了它的工作。而新用戶的標識是3.因此無論出於何種原因,devise想要跳過一個步驟或以某種方式嘗試插入兩次或其他東西。但是,再次,即使我得到了新用戶來創建,如果我再試一次,它不起作用。

這裏的鐵軌服務器的創建請求期間的打印輸出:

Started POST "/users" for ::1 at 2016-05-26 16:08:26 -0400 
Processing by RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"zl39rAOLLSRoEZUIcX574BlJtNgySlz/d5FRNIg3ZjuvcdQJxOVLDdWPAp3jQqhT3g1H0PCexFdHdmAQD81CKQ==", "user"=>{"first_name"=>"asdasd", "last_name"=>"asdasd", "email"=>"[email protected]", "password"=>"[FILTERED]", "confirm_password"=>"[FILTERED]"}, "instructor"=>"1", "commit"=>"Create my account"} 
    User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 4 ORDER BY `users`.`id` ASC LIMIT 1 
Redirected to http://localhost:3000/ 
Filter chain halted as :require_no_authentication rendered or redirected 
Completed 302 Found in 39ms (ActiveRecord: 0.5ms) 

這裏是我的UsersController文件:

class UsersController < ApplicationController 

    def index 
    @users = User.all 
    end 

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

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

    def new 
    @user = User.new 
    @user.active = 1 
    end 

    def create 
    @user = User.new(sign_up_params) # Not the final implementation! 
    if @user.save 
     redirect_to :action => :index 
    else 
     render 'signup' 
    end 
    end 

    def destroy 
    @user = User.find(params[:id]).destroy 
    if @user.destroy 
     redirect_to users_path 
    else 
     render 'index' 
    end 
    end 

private 

    def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :instructor, :active) 
    end 

end 

這裏是我的new.html.erb文件:

<h1>New User</h1> 

<%= render 'form' %> 

<%= link_to 'Back', users_path %> 

<div class="row"> 
    <div class="col-md-6 col-md-offset-3"> 
    <%= form_for(@user) do |f| %> 
     <%= f.label :first_name %> 
     <%= f.text_field :first_name %> 

     <%= f.label :last_name %> 
     <%= f.text_field :last_name %> 

     <%= f.label :email %> 
     <%= f.email_field :email %> 

     <%= check_box_tag(:instructor) %> 
     <center><%= label_tag(:instructor, "I want to be an instructor") %></center> 
     <br> 
     <br> 
     <%= f.label :password %> 
     <%= f.password_field :password %> 

     <%= f.label :confirm_password %> 
     <%= f.password_field :confirm_password %> 

     <%= f.submit "Create my account", class: "btn btn-primary" %> 
    <% end %> 
    </div> 
</div> 

感謝您的任何幫助,您可以提供

+0

您是否在登錄時提交了?如果你願意,devise方法'require_no_authentication'會重定向你。 – Swards

+0

Devise的重點在於它爲視圖,控制器等的認證提供了一個現成的解決方案。如果你想學習如何使一個認證系統成爲初學者,不要從黑客入侵開始。代碼非常複雜,因爲它需要具有瘋狂的靈活性。相反,請查看https://www.railstutorial.org – max

+0

之類的東西設計是否在創建用戶後自動登錄? – tanerD

回答

1

設計將不允許您自己以用戶身份登錄時創建新用戶。如果您需要此功能(通過您的Web應用程序登錄時添加用戶),並且不想從Rail控制檯添加用戶,則必須像下面那樣解決Devise問題:

創建用戶控制器:rails g controller Users 然後在你的路線,你必須指定:

devise_for :users, controllers: { sessions: "users/sessions" } 
    resources :users_crew, :controller => 'users' 

然後在你的新UsersController,你可以做你想做的,如:

class UsersController < ApplicationController 

    before_action :admin?, except: [:index] 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:success]="User added" 
     redirect_to root_path 
    else 
     flash[:error]="Something went wrong, please try again" 
     render 'new' 
    end 
    end 

    def index 

    end 

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

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     flash[:success]="User and oversight updated" 
     redirect_to root_path 
    else 
     flash[:error]="Something went wrong, please try again" 
     render 'new' 
    end 
    end 

    def destroy 
    @user = User.find(params[:id]) 
    if @user.destroy 
     flash[:success] = "The user account has been deleted." 
     redirect_to root_path 
    else 
     flash.now[:error] = "Sorry, user record was not changed." 
     redirect_to root_path 
    end 
    end 


    private 

    def user_params 
    params.require(:user).permit(:email, :first_name, :password, :password_confirmation) 
    end 

end 

這主要是告訴我們制定只需要它的會話。 users_crew資源指向用戶控制器,因此我們可以在那裏添加我們的自定義邏輯,而不用擔心在這個過程中黑客入侵設計。確保你給你的User.create方法提供一個密碼和password_confirmation屬性,因爲Devise仍然會處理註冊等。

最後,請記住你的用戶路由現在就像'users_crew_path'等。如果你使用我的路由。如果您不確定,請輸入bundle exec rake routes以獲取您設置的所有路線以及其幫助者的完整列表。