2012-04-04 64 views
0

我正在使用设计来帮助我的身份验证和各种原因我有几个用户模型的子类,有助于分开关注注册和一些其他业务逻辑。设计用户继承和user_signed_in?和current_user

User的子类是AffiliateAdmin(和我可能会在未来更多),所有这些的所有数据存储在用户表(未单独的表)。

所有用户都可以通过默认的users资源(/users/sign_in)登录。但是,这是我遇到问题的地方。

如果用户迹象通过/users/sign_in资源我可以访问user_signed_in?current_user助手,然后访问任何其他活动记录的关联。这就是我要的!呜呼!这很好。

但是,注册为Affiliate的用户也是如此。由于设计自动登录用户(我希望),我希望user_signed_in?等于truecurrent_user是刚刚登录的用户。当用户通过/affiliate/sign_up资源注册时,情况并非如此。

Affiliate模型(记住,它的子类用户像这样class Affiliate < User)我已经产生(通过色器件)的一组单独的控制器的/观看次数sign_up所以我可以有点自主的修改处理(作为sign_up过程有点更为这种特定类型的用户定制)。当用户通过此资源/affiliate/sign_up注册时,会员随后注册,但是现在,current_userniluser_signed_in?false。但是,助手current_affiliate是水合物,affiliate_signed_in?属实。

我想要做的是能够访问一个类型的帮手 - 在user_signed_in?帮手和助手current_user不是孩子affiliate_signed_in?current_affiliate。我只想访问:current_useruser_signed_in。看到Affiliate子类User,为什么user_signed_in?current_user返回当前用户(又名:Affiliate)?为什么current_affiliateaffiliate_signed_in?助手工作,但不是user - 不是?

有没有办法让框架始终使用current_useruser_signed_in?助手,因为一切都是User模型的子类?

回答

0

您设置它的方式似乎可以同时以用户和联属机构的身份登录。这意味着,在某个特定时刻,可能会有current_user和current_affiliate。如果你希望它一直是current_user,你可以重写Devise helpers。但是你必须确保只有一个用户或一个会员通过一个会话登录。否则Devise无法知道哪个对象返回current_user。