Rails 3,设计和单表继承问题

时间:2011-07-08 13:21:08

标签: ruby-on-rails devise single-table-inheritance ruby-on-rails-3.1

我在github上提供了一个简单的rails项目中的问题:

运行rails 3.1rc4: https://github.com/demental/devise_sti

运行rails 3.0.9: https://github.com/demental/devise_sti_rails3

基本上:

  • 我有一个使用设计行为的用户模型
  • 我有继承自用户的管理模型
  • 我的路由中有两个设计资源。

以管理员身份登录时,我会被authenticate_admin拒绝!过滤器,就像我是用户一样。

我不知道这是一个问题还是我做错了什么......任何想法?

1 个答案:

答案 0 :(得分:0)

回答自己:

我有两种方法可以避免这个问题,只有在运行测试时才会出现这个问题:

  1. 由于Devise映射是从路由中声明的第一个到最后一个devise_for迭代的,我可以检查这些行的顺序,并将devise_for:user放在最后。检查是使用is_a完成的,因此admin.is_a(用户),管理员已作为用户进行匹配。反转devise_for命令使Admin在User之前匹配。
  2. 我也可以(我想更干净)在sign_in帮助方法中使用scope参数:sign_in:admin Factory(:admin)