【发布时间】:2023-05-24 00:28:01
【问题描述】:
我正在使用 Ransack 搜索和 Postgresql 数据库。
我有一个输入需要使用“ILIKE”(文本列)在两个不同的列中进行搜索。
首先我创建了这个 ransacker:
ransacker :number do
Arel.sql("invoice_number::text")
end
效果很好:
Purchase.ransack({number_cont: "123"}).result.to_sql
# => "SELECT \"purchases\".* FROM \"purchases\" WHERE (invoice_number::text ILIKE '%123%')"
但是,我现在想使用相同的输入(所以,相同的 ransacker)在另一列中搜索。
我试过这样做:
ransacker :number do |parent|
Arel::Nodes::InfixOperation.new('OR', parent.table["invoice_number::text"], parent.table["shipping_number::text"])
end
返回:
Purchase.ransack({number_cont: "123"}).result.to_sql
# => "SELECT \"purchases\".* FROM \"purchases\" WHERE (\"purchases\".\"invoice_number::text\" OR \"purchases\".\"shipping_number::text\" ILIKE '%123%')"
所以你可以看到与我需要的没有什么不同,即:
"column1::text ILIKE '%123%' OR column2::text ILIKE '%123%'"
你知道我该怎么做吗?
【问题讨论】:
标签: ruby-on-rails postgresql arel ransack