我需要在rails中运行这样的查询:
select users.* from users inner join posts on users.id = posts.user_id where posts.title like '%xxx%' or posts.title like '%yyy%' or posts.title like '%zzz%'
用户和帖子是我的模特。我做了这样的事情:
title_array = ["xxx", "yyy", "zzz"]
users = User.all
users = users.joins(:posts).where(posts: { title: title_array })
但是这给了我这样的SQL查询:
select users.* from users inner join posts on users.id = posts.user_id where posts.title IN ('%xxx%', '%yyy%', '%zzz%')
此外,我在数组中有posts.title的值。所以我给出了三个OR值的示例,但它可能会随着每个请求而变化。
我需要rails方法来解决这个问题。有人可以帮我解决这个问题吗?
答案 0 :(得分:5)
尝试
users.joins(:posts).where(title_array.map{|title| "posts.title like '%#{title}%'"}.join(' or '))
答案 1 :(得分:1)
试试这个
title_array = ["xxx", "yyy", "zzz"]
users = User.all
condition = "1"
title_array.each {|t| condition = condition + " OR posts.title LIKE '%#{t}%'"}
users = users.joins(:posts).where(condition)