我有一个rails应用程序,它使用clearance和cancan gems进行身份验证和授权。最初,应用程序使用User model作为Clearance使用的user_model。现在,由于一些设计更改,我们希望另一个模型类Person由Clearance用作user_model。 Person模型已经到位,并且在应用程序的上下文中具有特定于Person模型的列。
Rails版本:3.2.14
Ruby版本:1.9.3-p487
清仓版:0.16.3
为实现这一目标,我们进行了以下更改:
根据http://rubydoc.info/github/thoughtbot/clearance/frames
中的建议更改了清除初始值设定项以设置* user_model = Person *Clearance.configure do |config|
config.user_model = Person
end
更新了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)>'
我参考了文档,谷歌群组的主题,用于清除组,论坛帖子但无法解决问题。有人做过类似的吗?你能帮我解决这个问题吗?
答案 0 :(得分:1)
看起来您的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文件,则可以确认。