在加密字段的where子句中搜索子字符串

时间:2013-09-30 21:59:54

标签: ruby-on-rails-3 activerecord encryption postgresql-9.2

使用带有rails 3.2.11的attr_encryptor-2.0.0 gem来加密postgresql 9.2.2数据库中的文本字段。

class Task < ActiveRecord::Base
    attr_encrypted :description, :key => 'A secret key'

在加密之前,我使用以下where子句来查找包含给定搜索词s的描述的记录。

current_user.tasks.where("description like ? ", '%'+s+'%')

如何使用加密描述栏进行操作?

我不了解find_by_encrypted_<column>的工作原理。以下代码返回nil是否使用整个描述或子字符串(现有记录)作为搜索词s

current_user.tasks.find_by_encrypted_description(Task.encrypt_description(s))

添加加密后,我没有改变创建记录的方式。我应该吗?

t = current_user.tasks.build(:description => @description)

谢谢!

1 个答案:

答案 0 :(得分:1)

使用attr_encrypted-1.2.1 gem和以下select子句结束:

tasks = current_user.tasks.select {|t| Task.decrypt(:description, t.encrypted_description).include?(s))}

使用attr_encryptor-2.0.0 gem我使用相同的代码得到了一个糟糕的解密错误。