3

我需要在 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%'

User 和 Post 是我的模型。我做了这样的事情:

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方式来解决这个问题。有人可以帮我解决这个问题吗?

4

2 回答 2

5

试一试

users.joins(:posts).where(title_array.map{|title| "posts.title like '%#{title}%'"}.join(' or '))
于 2013-08-01T09:58:12.640 回答
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)
于 2013-08-01T10:00:11.383 回答