如何在Postgres字符串字段中查询逗号分隔值? ROR / ActiveRecord

时间:2017-01-23 22:21:39

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord

我使用Ruby on Rails 4.2.3,我在userstwo_factor_secret_keytwo_factor_recovery_codes中有两个字符串字段。第一个具有字符串标记,而第二个具有由;分隔的十个标记。他们看起来像:

[62] pry(main)> ap User.last
  User Load (6.0ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" DESC LIMIT 1
#<User:0x007f8b3b009ad8> {
                              :id => 1,
                           :email => "test@me.com",
               ......
               ......
           :two_factor_secret_key => "jvyzizqib47gp4au",
       :two_factor_recovery_codes => "jgbcfjzh3lhpm6dv;er34rihizdlzu4fc;u32wwdmxl2dnxslv;liqcswrhjyfrpbkk;ttuezeszxnwzjent;4noxzmo4rg5jed5w;eynndg2gy5yzrdi3;h275valgjiiee7r3;f6m5xwujmtnucshe;tvhzxibvj4ikulyg"
}

如何以搜索two_factor_secret_keytwo_factor_recovery_codes的方式查询用户表。

在此示例中,如果查询基于jvyzizqib47gp4au,我希望返回用户,如果我使用er34rihizdlzu4fc,我应该返回{I},因为它包含在{{1}中}}?

使用two_factor_recovery_codes使用two_factor_secret_key很容易找到记录,但是我不确定如何使用{{1}查询User.where(two_factor_secret_key: "jvyzizqib47gp4au")分隔值。

请注意,我不想在activerecords中使用序列化,因为ROR应用程序不是负责在我的情况下生成数据的人。

有任何帮助吗?

1 个答案:

答案 0 :(得分:1)

您可以使用:

user = User.where("two_factor_secret_key LIKE :search OR two_factor_recovery_codes LIKE :search", search: "%jvyzizqib47gp4au%")