在Rails应用程序中为Devise视图/模型添加其他字段和validation
我生成了默认的设计视图:
rails generate devise:views
然后我在views/devise/registrations/new.html.erb
表单中添加了一个username
views/devise/registrations/new.html.erb
。
目前,仅进行email
和password
validation。 如何validationusername
段的状态和唯一性? 我是否需要在User
模型中添加一些内容?
我使用了其他答案中提到的教程, Railscast#210和Devise Wiki 。 但是,据我所知,他们没有明确说明如何validation用户名字段的存在和/或唯一性。
如果您通过简单的迁移添加了用户名 –
rails generate migration addUsernameToUser username:string
然后设计对该字段没有任何特殊之处,因此您需要在用户模型中自己添加对validation和唯一性的检查。
class User < ActiveRecord::Base ... validates_presence_of :username validates_uniqueness_of :username
但是,如果查看RailsCast#209,则会有一个用于创建User模型的迁移示例。
class DeviseCreateUsers < ActiveRecord::Migration def self.up create_table(:users) do |t| t.database_authenticatable :null => false # t.confirmable t.recoverable t.rememberable t.trackable # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both t.timestamps end add_index :users, :email, :unique => true # add_index :users, :confirmation_token, :unique => true add_index :users, :reset_password_token, :unique => true # add_index :users, :unlock_token, :unique => true end def self.down drop_table :users end end
请注意,用户电子邮件被定义为唯一的。 也许如果使用相同的语法添加用户名,那么设计魔术会处理存在和唯一性。
Rails 4和强参数
除此之外,我必须生成以下视图:
$ rails g devise:views
然后在devise.rb
添加:
config.scoped_views = true
最后为sign_up
配置如下所示的允许参数:
class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) do |u| u.permit :username, :email, :password, :password_confirmation end end end
这在Devise Doc中有所描述
此外,我对username
validation如下:
validates :username, presence: true validates :username, uniqueness: true, if: -> { self.username.present? }
我使用两行,所以如果username
名为空,我只会收到一个错误。
只需在您的用户模型和Devise wiki上添加用户名字段: http : //github.com/plataformatec/devise/wiki/Sign-in-using-login-or-mail
希望能帮助到你。