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