gpt4 book ai didi

mysql - 使用 ransack 通过关联对象过滤多个条件

转载 作者:行者123 更新时间:2023-11-30 00:29:23 27 4
gpt4 key购买 nike

我正在使用 Ransack 来提供数据过滤器。

主用户模型具有以下关联: user has_many trips, through registrations

基本搜索条件如user's name=xyz and trip's name=abc工作正常。

但是我们的大多数条件都适用于否定,例如 user's name=xyz and trip's name=abc and trip's name != def没有按预期工作。

我们正在尝试寻找参加过 ABC 旅行但未参加过 DEF 旅行的人。但为上述查询生成的 SQL 会生成以下子句: WHERE (trips.name LIKE 'ABC') AND (trips.name NOT LIKE 'DEF') 。这显然不起作用,因为 users 表是与此子句左内连接的,并且 trip.ids 是为名称如 ABC 而不是 DEF 的行生成的。

如何使用 Ransack 做到这一点?

更新:

如果搜索查询是“Users who had gone on trip name 'ABC'”,则生成的 SQL 没问题: SELECT DISTINCT users.* FROM users LEFT OUTER JOIN registrations ON registrations.user_id = users.id LEFT OUTER JOIN trips ON trips.id = registrations.batch_id WHERE (trips.name LIKE '%ABC%')

如果搜索查询是“去过‘ABC’和‘DEF’旅行的用户”,该怎么做?我尝试了两种不同的方法:

  1. 两个单独的条件,名称 = 'ABC' 和名称 = 'DEF'。这是通过“匹配所有”完成的。 SQL 给出了 0 个结果(显然),因为它是生成的: SELECT DISTINCT users.* FROM users LEFT OUTER JOIN registrations ON registrations.user_id = users.id LEFT OUTER JOIN trips ON trips.id = registrations.batch_id WHERE ((trips.name LIKE '%ABC%' AND trips.name LIKE '%DEF%'))
  2. 我尝试“匹配任何”。这给出了这个: SELECT DISTINCT users.* FROM users LEFT OUTER JOIN registrations ON registrations.user_id = users.id LEFT OUTER JOIN trips ON trips.id = registrations.batch_id WHERE ((trips.name LIKE '%ABC%' OR trips.name LIKE '%DEF%'))

第二个查询结果是那些选择了 ABC 或 DEF 的用户。

除此之外,我们还需要这样的查询:“已使用 ABC 但未使用 DEF 的用户”。我尝试了两个条件(匹配所有): trip.name = ABC 和 trips.name 不像 DEF。这是生成的 SQL: SELECT DISTINCT users.* FROM users LEFT OUTER JOIN registrations ON registrations.user_id = users.id LEFT OUTER JOIN trips ON trips.id = registrations.batch_id WHERE ((trips.name LIKE '%ABC%' AND trips.name NOT LIKE '%DEF%'))

以上查询返回了参加过 ABC 行程的人员。它没有过滤掉做过 DEF 的人,因为查询显然是错误的。

最佳答案

曾乘坐过“ABC”但未乘坐“DEF”的用户:

User.ransack(trips_name_eq: 'ABC', trips_name_not_eq: 'DEF').results

关于mysql - 使用 ransack 通过关联对象过滤多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com