设计用户继承和user_signed_in?和current_user

时间:2012-04-04 17:13:22

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 devise

我正在使用设计来帮助我进行身份验证,并且由于各种原因,我有一些User模型的子类,它有助于分离注册和其他一些业务逻辑的问题。

User的子类是AffiliateAdmin(我将来可能还有更多),所有这些都存储了User表中的所有数据(不是单独的表) )。

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

如果用户通过/users/sign_in资源登录,我可以访问user_signed_in?current_user帮助程序,然后访问任何其他Active Record关联。这就是我要的!呜啊!这非常有效。

但是,注册为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模型的子类?

1 个答案:

答案 0 :(得分:0)

您的设置方式似乎可以同时以用户和联属会员身份登录。这意味着,在给定时刻可能有current_user和current_affiliate。如果您希望它始终是current_user,则可以覆盖Devise帮助程序。但是你必须通过一个会话确保只有用户或联盟会员登录。 Else Devise无法知道要为current_user返回哪个对象。