我有这张桌子:
create_table "packages", force: :cascade do |t|
t.string "sender_type"
t.integer "sender_account_id"
t.integer "sender_user_id"
t.string "address"
t.text "type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "recipients", array: true
end
收件人数组采用模型类型和ID,用逗号分隔,就像["Manufacturer,4", "Retail,6"]
一样。
在我的where查询中,我希望找到包含任何带有“Manufacturer”字样的收件人的软件包:
Package.where("sender_type = ? and recipients.include = ?", "school", regex).
只是想知道我是否能够接近这个
答案 0 :(得分:0)
如果您要搜索的字符串始终位于数组的第一位,您可以像这样访问它:
Package.where("sender_type = ? and recipients[0] LIKE = ?", "school", "Manufacturer").
未经测试,因此您可能需要进行调整。
答案 1 :(得分:0)
其中一种方法是将recepients
转换为text
:
Package.where("sender_type = ? and recipients::text LIKE ?", "school", regex)
或者您可以使用unnest
函数将数组转换为行集。请检查此答案:https://stackoverflow.com/a/7222285/7362128