2014-01-24 76 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

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

相关问题