active_record-acts_as和设计集成

时间:2016-09-19 20:40:08

标签: ruby-on-rails ruby-on-rails-4 devise

我正在使用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

1 个答案:

答案 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