2014-01-24 28 views
0

我跟着關於巫術在railscasts一切,但是當我試圖創建一個用戶,它給了我這個錯誤的ActiveRecord :: StatementInvalid在UsersController#創建,當我用魔法寶石

SQLite3::ConstraintException: users.username may not be NULL: INSERT INTO "users" ("created_at", "crypted_password", "email", "salt", "updated_at") VALUES (?, ?, ?, ?, ?) 

請幫我解決這個問題問題,請到一起來看看我的github:https://github.com/simpsonness/test_app

謝謝~~~

+0

發佈您的應用程序的相關代碼 –

+0

歡迎來到Stack Overflow。爲了最好地解決您的問題,您需要發佈一個「好問題」。請檢查這裏的指導:http://stackoverflow.com/help/on-topic。通過在生成此SQL的代碼周圍發佈代碼,可以改進您的問題。您還可能想要檢查:爲什麼您要在不包含用戶名的情況下將用戶的值插入到用戶表中? – GreenAsJade

回答

0

如果你不想使用username列,創建一個遷移,將其刪除:

bundle exec rails g migration remove_username_from_users username:string 

並運行它。否則,將:username添加到您的UsersController#user_params私有方法中允許的參數中,併爲您的視圖添加適當的字段。

+0

我補充說:用戶名,它的作品~~謝謝! –

+0

@ShanNess如果您發現我的答案有幫助,請將其標記爲已接受。 –

1

消息表示您尚未爲您的新用戶記錄設置username字段。有一種方法可以解決它。在您的app/views/users/new.html.erb文件中,您需要添加一個username字段。因此,它看起來像下面這樣:

<h1>Sign Up</h1> 

<%= form_for @user do |f| %> 
    <% if @user.errors.any? %> 
    <div class="error_messages"> 
     <h2>Form is invalid</h2> 
     <ul> 
     <% for message in @user.errors.full_messages %> 
      <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :username %> 
    <%= f.text_field :username %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.label :password %> 
    <%= f.password_field :password %> 
    </div> 
    <div class="field"> 
    <%= f.label :password_confirmation %> 
    <%= f.password_field :password_confirmation %> 
    </div> 
    <div class="actions"><%= f.submit %></div> 
<% end %> 

此外,您還需要修復參數過濾你的app/controllers/users_controller.rb。此更新您的user_params方法:

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

這就是它!它應該現在工作。

+0

它的工作原理!謝謝~~~ –

相關問題