Ctrl K
ComunidadGuías…

app/controllers/search_controller.rb

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# frozen_string_literal: true

class SearchController < ApplicationController
  SEARCH_RESULT_MAX_AMOUNT = 10

  after_action :set_link_header, only: :index, if: :api_request?

  def index
    searched_albums = Album.search(params[:query]).includes(:artist).with_attached_cover_image
    searched_artists = Artist.search(params[:query]).with_attached_cover_image
    searched_playlists = Playlist.search(params[:query])
    searched_songs = Song.search(params[:query]).includes(:artist, :album)

    @albums = searched_albums.limit(SEARCH_RESULT_MAX_AMOUNT).load_async
    @is_all_albums = searched_albums.count <= SEARCH_RESULT_MAX_AMOUNT

    @artists = searched_artists.limit(SEARCH_RESULT_MAX_AMOUNT).load_async
    @is_all_artists = searched_artists.count <= SEARCH_RESULT_MAX_AMOUNT

    @playlists = searched_playlists.limit(SEARCH_RESULT_MAX_AMOUNT).load_async
    @is_all_playlists = searched_playlists.count <= SEARCH_RESULT_MAX_AMOUNT

    @songs = searched_songs.limit(SEARCH_RESULT_MAX_AMOUNT).load_async
    @is_all_songs = searched_songs.count <= SEARCH_RESULT_MAX_AMOUNT
  end

  private

  def set_link_header
    links = []
    links << %(<#{search_albums_url(query: params[:query])}>; rel="search-albums") unless @is_all_albums
    links << %(<#{search_artists_url(query: params[:query])}>; rel="search-artists") unless @is_all_artists
    links << %(<#{search_playlists_url(query: params[:query])}>; rel="search-playlists") unless @is_all_playlists
    links << %(<#{search_songs_url(query: params[:query])}>; rel="search-songs") unless @is_all_songs

    response.headers["Link"] = links.join(", ") if links.any?
  end
end