gpt4 book ai didi

ruby-on-rails - 通过 Rails 中的方法进行 SQL 或 AREL 查询

转载 作者:行者123 更新时间:2023-11-29 14:30:31 25 4
gpt4 key购买 nike

在rails中,如果我想搜索表中的某一列,我只需要做一个where搜索,我可以很快得到结果。例如:

openings = Opening.joins(:opening_number).where('opening_numbers.value = ?', value)

但是,现在我需要按方法搜索。例如,这是 OpeningNumber 模型中的一个方法:

def to_s
value || sprintf("%03d", id % 1000)
end

然后我想通过这个方法的结果进行搜索。我不知道如何通过 sqlarel 来完成。我能做的是:

openings = Opening.includes(:opening_number)
.select { |opening| opening.opening_number.to_s == value }

但是,它比 sql 查询慢得多,并且会导致性能问题。

有谁知道如何用sql或arel来做吗?或者如果没有,如何提高sql查询等性能?

以前是用ferrets和mysql来索引和搜索。但是最近我们将 mysql 转移到 postgresql 并删除了 ferrets

最佳答案

所以你基本上是在问如何实现 value || (id % 1000).print_using("%03d") sql where语句中的逻辑?

直接的方法是:

Opening.includes(:opening_number).where("opening_numbers.value = ? OR (format('%03d', (opening_numbers.id % 1000)::string))::integer = ?", value).references(:opening_numbers)

还要检查您是否仍需要使用 includes。对于这种情况,joins 就足够了

关于ruby-on-rails - 通过 Rails 中的方法进行 SQL 或 AREL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507932/

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