Commit 9ccd2f4c by Mai Hoang Thai Ha

search

parent c4008be4
...@@ -14,7 +14,12 @@ class ApplicationController < ActionController::Base ...@@ -14,7 +14,12 @@ class ApplicationController < ActionController::Base
private private
def city_industry_list
@city_slug_list = City.pluck(:name)
@industry_slug_list = Industry.pluck(:name)
end
def salary_search def salary_search
@salary_range = [0, 3_000_000, 7_000_000, 10_000_000, 15_000_000, 20_000_000, 30_000_000] @salary_range = [3_000_000, 7_000_000, 10_000_000, 15_000_000, 20_000_000, 30_000_000]
end end
end end
class JobsController < ApplicationController class JobsController < ApplicationController
before_action :history, only: :show before_action :history, only: :show
before_action :salary_search before_action :salary_search
before_action :city_industry_list
before_action :name, only: :index
def index def index
@search = params solr = Solr.new(params)
solr = Solr.new(@search) jobs_query = if params[:city_slug]
if params[:city_slug] solr.query_by_city
jobs_query = solr.query_by_city
@name = City.find_by(slug: params[:city_slug]).name
elsif params[:industry_slug] elsif params[:industry_slug]
jobs_query = solr.query_by_industry solr.query_by_industry
@name = Industry.find_by(slug: params[:industry_slug]).name
else else
jobs_query = solr.query_all solr.query_all
@name = 'Jobs'
end end
get_jobs(jobs_query) get_jobs(jobs_query)
@jobs = Kaminari.paginate_array(@jobs).page(params[:page]).per(Job::JOB_PER_PAGE) @jobs = Kaminari.paginate_array(@jobs).page(params[:page]).per(Job::JOB_PER_PAGE)
end end
...@@ -34,6 +31,16 @@ class JobsController < ApplicationController ...@@ -34,6 +31,16 @@ class JobsController < ApplicationController
history.update(updated_at: Time.current) history.update(updated_at: Time.current)
end end
def name
@name = if params[:city_slug]
City.find_by(slug: params[:city_slug]).name
elsif params[:industry_slug]
Industry.find_by(slug: params[:industry_slug]).name
else
'Jobs'
end
end
def get_jobs(query) def get_jobs(query)
jobs_ids = query['response']['docs'].map { |j| j['job_id'] } jobs_ids = query['response']['docs'].map { |j| j['job_id'] }
@jobs = Job.eager_load(:cities, :cities_jobs, :company).find(jobs_ids) @jobs = Job.eager_load(:cities, :cities_jobs, :company).find(jobs_ids)
......
class TopController < ApplicationController class TopController < ApplicationController
before_action :salary_search before_action :salary_search
before_action :city_industry_list
def index def index
@total_job = Job.count @total_job = Job.count
......
...@@ -38,11 +38,10 @@ class Solr ...@@ -38,11 +38,10 @@ class Solr
def query_all def query_all
q = "search:*#{@params[:search]}*" q = "search:*#{@params[:search]}*"
fq = if @params[:salary] fq = []
"min_salary: [#{@params[:salary]} TO *]" fq.push("min_salary: [#{@params[:salary]} TO *]") if @params[:salary].present?
else fq.push("cities_name: \"#{escape_str(@params[:city])}\"") if @params[:city].present?
'' fq.push("industries_name: \"#{escape_str(@params[:industry])}\"") if @params[:industry].present?
end
send_request(q, fq) send_request(q, fq)
end end
...@@ -101,7 +100,8 @@ class Solr ...@@ -101,7 +100,8 @@ class Solr
end end
def escape_str(str) def escape_str(str)
RSolr.solr_escape(str) # RSolr.solr_escape(str)
CGI::escapeHTML(str)
end end
def city_handle(ids, jobs_count) def city_handle(ids, jobs_count)
......
...@@ -29,12 +29,26 @@ ...@@ -29,12 +29,26 @@
- else - else
= form_tag(jobs_path, method: :get, class: "form-inline") do = form_tag(jobs_path, method: :get, class: "form-inline") do
.row .row
.col-md-8.mb-md-0.no-padding .col-md-4.mb-md-0.no-padding
= search_field_tag :search, params[:search], placeholder: 'Find a job (name, company, position)', class: 'form-control rounded-left no-border-radius bg-light h-100' = search_field_tag :search, params[:search], placeholder: 'Find a job (name, company, position)', class: 'form-control rounded-left no-border-radius bg-light h-100'
.col-md-2.mb-md-0.no-padding .col-md-2.mb-md-0.no-padding
= select_tag(:city,
options_for_select( @city_slug_list,
params[:city] ),
include_blank: 'Select city',
class:"form-select bg-light h-100")
.col-md-2.mb-md-0.no-padding
= select_tag(:industry,
options_for_select( @industry_slug_list,
params[:industry] ),
include_blank: 'Select city',
class:"form-select bg-light h-100")
.col-md-2.mb-md-0.no-padding
= select_tag(:salary, = select_tag(:salary,
options_for_select( @salary_range.collect {|s| [vnd_format(s), s]}, options_for_select( @salary_range.collect {|s| [vnd_format(s), s]},
params[:salary] ), params[:salary] ),
include_blank: 'Select salary',
class:"form-select bg-light h-100") class:"form-select bg-light h-100")
.col-md-2.mb-md-0.no-padding .col-md-2.mb-md-0.no-padding
= submit_tag "Search", class: "h-100 w-100 btn btn-block btn-lg btn-info" = submit_tag "Search", class: "h-100 w-100 btn btn-block btn-lg btn-info"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment