我目前正在构建一个包含 3 种用户类型的 rails 应用程序。这是我第一次体验 Web 开发,我想避免犯下关键的设计错误,这些错误会让我日后付出代价。希望更有经验的 Rails 用户和 Web 开发人员能够指导我朝着正确的方向前进。
我想使用 Devise 作为我的主要身份验证系统,我目前正在计划这样的事情,以便在 Devise 框架内支持 3 种用户类型:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
belongs_to :rolable, :polymorphic => true
end
对于三种用户类型中的每一种:
# usertype1.rb
class UserType1 < ActiveRecord::Base
has_one :user, :as => :rolable
end
# usertype2.rb
class UserType2 < ActiveRecord::Base
has_one :user, :as => :rolable
end
本质上,用户类和几种不同的用户类型之间存在多态关联。我希望这种方法最终允许我在用户类型模型(例如 has-many)中添加不同的关联关键字,从而方便地查询数据库。
我还关心如何实现用户相关的路由。这个想法是,每个用户类型在登录时都会看到一个单独的“中心”,具有不同的仪表板、不同的操作等。我想我会通过覆盖 Devise SessionsController 来解决这个问题。像这样的东西:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
if user.type == 1
redirect_to hub_typeone
else if user.type == 2
redirect_to hub_typetwo
else
redirect_to hub_typethree
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Logged out!"
end
end
这个想法是,在成功进行身份验证后,用户将根据用户类型被路由到不同的页面。我计划使用设计 current_user 框架然后查询数据库以使用特定于用户的数据填充集线器。
你们对我有什么指点吗?你在我的计划/推理/方法中看到任何巨大的缺陷吗?提前致谢!