Rails: включает не работает в области модели - PullRequest
1 голос
/ 09 мая 2020

Я создал область видимости в своей модели book и хочу включить отношение author. К сожалению, отношение не загружается со следующим кодом:

scope :search, ->(title) {
    quoted_title = ActiveRecord::Base.connection.quote_string(title)
        includes(:author).where("title % :title", title: title).
      order(Arel.sql("similarity(title, '#{quoted_title}') DESC"))
  }

Я пробовал несколько настроек, таких как использование joins (: author) .merge (), но отношение все еще не загружено. Есть идеи, как загрузить отношение в область видимости? Спасибо.

Вот контроллер с методом, который я вызвал через Ajax для отображения результатов поиска:

def search
   results_books = Book.search(search_params[:q]).first(5)
   results_authors = Author.search(search_params[:q]).first(5)

     results = results_books + results_authors

   render json: { results: results }, status: :ok
  end

1 Ответ

1 голос
/ 09 мая 2020

Для функции поиска в вашей области, если я правильно понимаю, вы пытаетесь выбрать книги, которые соответствуют искомым параметрам в соответствии с полем заголовка. Если да, то могу ли я предложить более короткую версию вроде этой:

 scope :search, lambda { |title|
    where('title like ?', "%#{title}%")
  }

Что касается включения связанных авторов в вывод json. Обычно мы используем JBuilder при возврате JSON объектов во внешний интерфейс. Если вы настаиваете на использовании basi c RoR, тогда ознакомьтесь с этим ответом Substanstial { ссылка }

Это не проверено, поэтому дайте мне знать, насколько хорошо он работает. Остальная часть поста, которым я поделился, также касается JBuilder как предпочтительной альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...