動態根我有三個型號如下:用於身份驗證的多態屬性
user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :role, polymorphic: true
validates_presence_of :first_name, :last_name, :email, :password,
:password_confirmation
end
student.rb
class Student < ActiveRecord::Base
has_one :user, as: :role, dependent: :destroy
accepts_nested_attributes_for :user
end
teacher.rb
class Teacher < ActiveRecord::Base
has_one :user, as: :role, dependent: :destroy
accepts_nested_attributes_for :user
end
我有用戶註冊和登錄按預期工作。然而,我無法弄清楚如何,當他們正在登錄用戶引導到相應的網頁
我處理路由認證用戶如下:
authenticated :user do
root to: "students#home", as: :user_root
end
理想的情況下,如果當前用戶的role
屬性是學生,那麼它將students#home
設置爲:user_root
。如果它是一個老師,然後設置teachers#home
爲:user_root
。有沒有什麼辦法可以純粹處理路線?
我主要選擇了一個多態的用戶,因爲老師和學生應登錄並通過相同的形式註冊,因爲他們的行爲非常相似,但同樣沒有足夠的STI。我們以前有兩個獨立的模型,發現我們寫重複的代碼,並引入潛在的bug(如果老師有相同的電子郵件作爲一個學生嗎?我們怎麼把手登錄呢?)。 我的實現很大的啓發來自http://stackoverflow.com/questions/7299618/multiple-user-models-with-ruby-on-rails-and-devise-to-have-seperate-registration –
你覺得兩個當分享大多數功能並通過相同的表單登錄時,單獨的模型仍然最有意義? –
如果您使用關注和rspec共享示例,則無重複代碼。 Devise默認情況下不使用作用域視圖,所以這不是問題。那麼,用戶和老師可能會有相同的電子郵件,這將如何呢? – AJcodez