В рельсах, если я хочу найти столбец в таблице, мне просто нужно выполнить поиск 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
.