Rails 5, Postgres, ActiveRecord - как включить значение функции в качестве поля модели

Я использую модуль Trigram (pg_trgm) для Postgres в приложении Rails 5 для текстового поиска. Мне удалось успешно найти удовлетворительные результаты, используя следующий вызов, чтобы найти предельное количество записей, имена которых похожи на запрос:

  def self.glance(query, limit = 10)
    find_by_sql(['select *, name <-> ? as confidence from studies order by confidence limit ?', query, limit])
  end

Теперь я хотел бы расширить результаты, включив в них значение функции сходства для каждой записи и целевой запрос для отображения.

Меня считают, что я должен установить область (или метод класса), где я могу сделать параметризованный вызов оператора расстояния (name <->?), А затем вернуть значение, как если бы оно было атрибутом в модели базы данных.

Могу ли я получить рекомендацию по наилучшей практике для этого? Спасибо.

1 ответ

Если вы на study Модель, я думал, что вы можете использовать область видимости и, как реализовано следующее:

scope :glance, ->(query, limit = 10) { where('name LIKE %?%', query).order(:confidence).limit(limit) }
Другие вопросы по тегам