0

I have users table and redemptions Table. So for security reasons we have encrypted our users table email and mobile column.

User Table columns before encryption:

id | mobile | email | name | 

User Table columns after encryption:

id | name | email_ciphertext | mobile_ciphertext | email_bidx | mobile_bidx

User.rb

has_many :redemptions

Redemption.rb

belongs_to :User

So In one place I wanted to get Redemption information along with User details. My query before encrypting the User's mobile and email was

Redemption.joins(:user).group('users.id, users.mobile').select('users.id AS uid, users.name AS uname, users.email AS uemail, users.mobile AS umobile, count(distinct(redemptions.id)) AS total)

So this would give me Users and their redemptions count. Now that I have encrypted my data using Lockbox and BlindIndex and dropped both email and mobile column from users table, what approach should I follow to achieve the same result for the above query.

Suganya Selvarajan
  • 962
  • 1
  • 11
  • 33

1 Answers1

0

If you're trying to get redemption count by user, you can do:

redemptions_by_user_id = Redemption.joins(:user).group("users.id").distinct.count

Then query the user information in a separate query.

users = User.where(id: redemptions_by_user_id.keys)

Then combine them

users.each do |user|
  puts "#{user.id} #{user.email} #{user.phone} #{redemptions_by_user_id[user.id]}"
end
Andrew Kane
  • 3,200
  • 19
  • 40