如何在Ruby on Rails中根据搜索结果进行二次查询

4xy9mtcn  于 2023-11-18  发布在  Ruby
关注(0)|答案(1)|浏览(96)

在控制器中得到这样的搜索结果后:

@q = SomeModel.ransack(q)

字符串
我想根据搜索结果(@q)再查询一次。

SELECT * FROM ransack_result WHERE some_field IN ('a', 'b', 'c')


是否有任何方法来申请额外的查询?
更多背景信息:
在Rails 7中,some_field是用ActiverRecord::Encryption加密的。当我尝试使用q[:some_field_in] = ['a', 'b', 'c']包含WHERE some_field IN ('a', 'b', 'c')时,'a''b''c'都是加密的。
我在一个过渡期,some_field包括加密和未加密的值,所以我想查询加密和未加密的数据,同时保持其他条件。ransack现在不支持加密属性,所以这就是为什么我不能使用ransack中提供的*_in匹配器。:'(
或者.如果我能在rails控制器中获得ransack生成的sql查询就好了--那么我就可以附加上面的查询了!

jaxagkaj

jaxagkaj1#

要根据从Ransack获得的结果执行额外的查询,您可以提取Ransack生成的SQL,然后“手动”添加您的自定义查询条件:

@q = SomeModel.ransack(q)

# obtain generated SQL by Ransack
original_query = @q.result.arel.to_sql

# your manual modifications
custom_condition = "some_field IN ('a', 'b', 'c')"
custom_query = "#{original_query} AND #{custom_condition}"

# perform the SQL query
SomeModel.find_by_sql(custom_query)

字符串

相关问题