2016-09-19 46 views
0

我正在寫我的第一個rails應用程序使用active_record-acts_as和設計。我有一個用戶(設計身份驗證和可執行),客戶端(act_as)和所有者(act_as)。我重寫了registration_controller在設計表單中添加了一些額外的字段,如客戶和所有者需要的名稱,姓氏等字段。我正在嘗試使用用戶的設計認證註冊客戶和所有者,但添加了其他字段。我想在用戶上定義認證以避免模式中的重複。沒有定義客戶和所有者的設計控制器,是否可以這樣做?active_record-acts_as和設計集成

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

我認爲你應該瞭解你正在使用的寶石是,它會給你帶來空列的想法。但是,您需要注意的是,每個細節都會顯示在其各自的表格中。如上所述,您可以在希望設置身份驗證的任何表上使用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_ashere

因爲它與設計MTI設置驗證,相應的數據去到它的假設是正確的開箱即用的,那麼我會建議你在其他表上是acts_as :user設置驗證,但屬性,這些屬性不在上設計表。例如:

class Client < ActiveRecord::Base 
    acts_as :user 

    validates :school, :uniqueness => true 
end