在rails应用程序中使用User以外的模型进行间隙验证



我有一个rails应用程序,它使用clearance和cancan-gems进行身份验证和授权。最初,应用程序使用User模型作为Clearance要使用的User_model。现在,由于一些设计更改,我们希望Clearance使用另一个模型类Person作为user_model。Person模型已经就位,并且在应用程序的上下文中具有特定于Person模型的列。

Rails版本:3.2.14
Ruby版本:1.9.3-p487
清仓版本:0.16.3

为了实现这一点,我们做了以下更改:

  1. 将Clearance所需的字段(电子邮件、encrypted_password、remember_token、salt、confirmation_token)从用户模型迁移到人员模型
  2. 使个人模型包括Clearance::User
  3. 根据中的建议,将Clearance初始值设定项更改为设置*user_model=Person*http://rubydoc.info/github/thoughtbot/clearance/frames

    Clearance.configure do |config|
    config.user_model = Person
    end
    
  4. 更新了Person模型的工厂定义如下:

    FactoryGirl.define do
    sequence(:email) {|n| "user#{n}@example.com" }
    factory :person do
    ignore do
    group nil
    end
    email
    password { "password" }
    company
    first_name { FactoryGirl.generate(:name).capitalize }
    last_name  "Test"
    groups { [group || FactoryGirl.create(:group)] }
    end
    end
    

在这些更改之后,当我运行与人员相关的规范时,无法使用工厂创建人员对象。我有以下问题。

1) Person 
Failure/Error: it { should validate_presence_of(:first_name) }
NameError: undefined local variable or method `encrypted_password' for #<Person:0x00000001e7bcc8>
# ./spec/models/person_spec.rb:8:in `block (2 levels) in <top (required)>'

我参考了文档,谷歌小组上的主题,清除小组,论坛帖子,但无法解决这个问题。有人做过类似的事吗?你能帮我解决这个问题吗?

您的Person类似乎没有encrypted_password列。确保它有这个,以及下面的字段

t.string :email
t.string :encrypted_password, :limit => 128
t.string :confirmation_token, :limit => 128
t.string :remember_token, :limit => 128

如果你发布schema.rb或person.rb文件,这可以得到确认。

相关内容

  • 没有找到相关文章

最新更新