ruby-on-rails - Ruby On Rails 设计使用用户名而不是电子邮件注册和登录
问题描述
我正在尝试使用 devise views/devise/registrations/new/html.erb将用户名字段添加到我的注册中
<h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= render "devise/shared/error_messages", resource: resource %>
<div class="field">
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true, autocomplete: "email" %>
</div>
<div class="field">
<%= f.label :password %>
<% if @minimum_password_length %>
<em>(<%= @minimum_password_length %> characters minimum)</em>
<% end %><br />
<%= f.password_field :password, autocomplete: "new-password" %>
</div>
<div class="field">
<%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation, autocomplete: "new-password" %>
</div>
<div class="actions">
<%= f.submit "Sign up" %>
</div>
<% end %>
<%= render "devise/shared/links" %>
我收到一个错误:“#Usermanagement:0x00007f3db801a8e0 的未定义方法‘用户名’”我做错了什么?我是 ROR 的新手,所以请帮我弄清楚。谢谢!
解决方案
假设您已将您的设计模型命名为用户
- 向设计用户模型添加
username
字段
$ rails generate migration add_username_to_users name:string
- 迁移文件应如下所示
class AddUsernameToUsers < ActiveRecord::Migration
def change
add_column :users, :username, :string
end
end
- 迁移数据库
$ rails db:migrate
- 生成设计视图
$ rails generate devise:views -v registrations
- 更新注册和编辑个人资料表格
# views/devise/registrations/new.html.erb
# views/devise/registrations/edit.html.erb
<div class="field">
<%= f.label :username %><br />
<%= f.text_field :username, autofocus: true %>
</div>
- 覆盖设计控制器
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username, :email, :password])
devise_parameter_sanitizer.permit(:account_update, keys: [:username, :email, :password, :current_password])
end
end
- 添加模型验证
class User < ApplicationRecord
validates_presence_of :username
# ...
end
推荐阅读
- linux - 如何检查守护程序是否作为脚本的一部分成功启动?
- flutter - Flutter:从 Firebase 实时数据库项目创建 GridView
- reactjs - 调用浏览器上的后退按钮时未调用 Componentdidmount-ReactJS
- java - Java 文件 I/O 问题:文件现在由 newBufferedWriter 写入
- sql - 在开始行的结束日期和结束时间列添加结束日期和时间值
- python - 使用 Python 输出重复值 ID 和非重复值的列表
- laravel - Laravel:具有相同位置和名称的多条路线
- keras - 实现SRCNN时获取卷积算法失败
- list - 测试嵌套列表中的对角相邻元素
- angular - 使用 Angular cli 进行单元测试,http 测试不起作用