'find_by'和'where'不能与attr_encrypted一起使用

时间:2016-04-17 23:53:06

标签: ruby-on-rails

用户模型中的电子邮件字段使用attr_encrypted加密。当我使用devise和facebook omniauth创建新用户时,它实际上会保存在DB中。此外,我可以使用User.last.email #=> foo@foo.com检索该数据。

但是当我使用User.find_by_email("foo@foo.com")User.where(email: "foo@foo.com")时,它会返回nil或[]。

user.rb

class User < ActiveRecord::Base
  attr_encrypted :email, key: Settings.encryption.key
end

1 个答案:

答案 0 :(得分:1)

如果您使用的是attr_encrypted gem,我认为email是虚拟字段,并且实际上作为users字段保存在encrypted_email表中。

schema.rb表的users文件是什么样的?

如果是这种情况,我认为你只需要使用

User.find_by_encrypted_email("foo@foo.com")

而不是

User.find_by_email("foo@foo.com")

宝石文档:https://github.com/attr-encrypted/attr_encrypted

祝你好运!