def keyword
    if params[:keyword]
      keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
      keywords.each do |keyword|
        offices = Office.where('name LIKE ? OR address LIKE ? OR near_station LIKE ? OR introduction LIKE ? OR company LIKE ?',"%#{keyword}%", "%#           {keyword}%", "%#{keyword}%", "%#{keyword}%", "%#{keyword}%")
      end
    else
      pagy, offices = pagy(Office.all)
      pagy_headers_merge(pagy)
    end
    render json: offices, each_serializer: OfficeIndexSerializer, include: '**'
  end
J'errais avec une telle description. La raison est qu'il est possible de rechercher avec un seul mot, mais avec plusieurs mots-clés (par exemple, avec une méthode de recherche telle que "Tokyo Fukuoka", il était possible de rechercher uniquement avec le mot Fukuoka.
  def keyword
    if params[:city_id]
      offices = Office.where(city_id: params[:city_id])
    elsif params[:keyword]
      keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
      offices = []
      keywords.each do |keyword|
        offices += Office.where('name LIKE (?) OR address LIKE (?) OR near_station LIKE (?) OR introduction LIKE (?) OR company LIKE (?)',"%#{keyword}%", "%#{keyword}%", "%#{keyword}%", "%#{keyword}%", "%#{keyword}%")
      end
    else
      pagy, offices = pagy(Office.all)
      pagy_headers_merge(pagy)
    end
    render json: offices
  end
Comme point étrange, j'ai ajouté ʻoffices = [] . Une image de la création d'une boîte pour stocker des mots-clés.  Ensuite, j'ai ajouté () à ʻoffice + = Office.where`` et? Dans la clause where.
En conséquence, il a été possible d'établir une fonction de recherche non seulement pour une recherche par mot-clé à un seul mot comme "Tokyo", mais aussi pour plusieurs mots-clés tels que "Tokyo Fukuoka Chiba".
Recommended Posts