Rails 5, Postgres, ActiveRecord - как включить значение функции в качестве поля модели - PullRequest
0 голосов
/ 03 сентября 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 04 сентября 2018

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

scope :glance, ->(query, limit = 10) { where('name LIKE %?%', query).order(:confidence).limit(limit) }
...