【发布时间】:2018-09-25 23:33:54
【问题描述】:
在rails中,如果我想在table中搜索一列,我只需要做一个where搜索,就能很快得到结果。例如:
openings = Opening.joins(:opening_number).where('opening_numbers.value = ?', value)
但是,现在我需要按方法搜索。例如,这是OpeningNumber模型中的一个方法:
def to_s
value || sprintf("%03d", id % 1000)
end
然后我想通过这个方法的结果进行搜索。我不知道如何通过sql 或arel 做到这一点。我能做的是:
openings = Opening.includes(:opening_number)
.select { |opening| opening.opening_number.to_s == value }
但是,它比 sql 查询慢得多,并且会导致性能问题。
有谁知道怎么用 sql 或 arel 来做?或者如果没有,如何提高sql查询的性能?
过去,它使用ferrets和mysql,所以它可以被索引和搜索。但是最近我们把mysql转成postgresql,去掉ferrets。
【问题讨论】:
-
什么是
print_using方法? -
刚刚发现
print_using是自定义方法,更新了。
标签: ruby-on-rails postgresql arel