我在railscast中跟踪了关于巫术的一切,但当我尝试创建用户时,它给了我这个错误
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 :(得分: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
就是这样!它现在应该可以工作了。
答案 1 :(得分:0)
如果您不想使用username
列,请创建一个将其删除的迁移:
bundle exec rails g migration remove_username_from_users username:string
然后运行它。否则,请在:username
私有方法中将UsersController#user_params
添加到允许的参数中,并在视图中添加相应的字段。