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 の値があります。そのため、3 つの OR 値の例を示しましたが、リクエストごとに異なる場合があります。

これを解決するにはレールの方法が必要です。誰かがこれを理解するのを手伝ってくれますか?

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 に答える