我正在使用active_record-acts_as和devise编写我的第一个rails应用程序。我有一个用户(设计身份验证和行为),客户端(act_as)和所有者(act_as)。我覆盖了registration_controller,在设计表单中添加了一些额外的字段,如客户和所有者所需的名称,姓氏等字段。我尝试使用用户的设计身份验证注册客户端和所有者,但添加其他字段。我想在用户上定义身份验证以避免模式中的重复。是否可以在不定义客户端和所有者的设计控制器的情况下执行此操作?
client.rb
class Client < ActiveRecord::Base
acts_as :user
end
owner.rb
class Owner < ActiveRecord::Base
acts_as :user
end
user.rb
class Utente < ActiveRecord::Base
actable
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
的routes.rb
Rails.application.routes.draw do
devise_for :users, :controllers => { registrations: 'registrations' }
resources :clients
resources :users
resources :owners
end
答案 0 :(得分:0)
我认为你应该了解的是你正在使用的宝石,它会给你带来空列的想法。但是,您需要注意,每个细节都会显示在各自的表中。
话虽如此,您可以在希望设置身份验证的任何表上使用rails身份验证。
现在根据您问题的后半部分,您要求避免在桌面上重复,您在模型中设置validation
,以便您的任何模型成为:
class Utente < ActiveRecord::Base
actable
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :email, :uniqueness => true
end
您可以在active_record-acts_as
here
由于它带有Devise的MTI,各自的数据会出现在开箱即用的地方,然后我会建议你在acts_as :user
的其他表上设置验证,但是在actable
以外的属性上设置验证。 {1}}设计表。例如:
class Client < ActiveRecord::Base
acts_as :user
validates :school, :uniqueness => true
end