fix paginaion and refactor controller

parent f286a516
Pipeline #1493 failed with stages
in 0 seconds
...@@ -23,9 +23,11 @@ class JobsController < ApplicationController ...@@ -23,9 +23,11 @@ class JobsController < ApplicationController
def search def search
@keyword = job_params[:search].gsub!(/[^[:alnum:]]/, ' ') @keyword = job_params[:search].gsub!(/[^[:alnum:]]/, ' ')
response = SolrSearch.new.search(@keyword) response = SolrSearch.new.search(@keyword, params[:page])
@result_search = Kaminari.paginate_array(response).page(params[:page]) job_ids = response['response']['docs'].map { |job| job['job_id'] }
@total = response.count jobs = Job.latest_jobs.find(job_ids)
@total = response['response']['numFound']
@jobs = Kaminari.paginate_array(jobs, total_count: @total).page(params[:page])
end end
private private
......
...@@ -28,8 +28,4 @@ module ApplicationHelper ...@@ -28,8 +28,4 @@ module ApplicationHelper
def favorite_text(job) def favorite_text(job)
FavoriteJob.find_by(job: job, user: current_user).present? ? 'Unfavorite' : 'Favorite' FavoriteJob.find_by(job: job, user: current_user).present? ? 'Unfavorite' : 'Favorite'
end end
def query_job(job)
Job.find_by(id: job['job_id'])
end
end end
...@@ -8,7 +8,7 @@ class Job < ApplicationRecord ...@@ -8,7 +8,7 @@ class Job < ApplicationRecord
has_and_belongs_to_many :industries has_and_belongs_to_many :industries
has_and_belongs_to_many :cities has_and_belongs_to_many :cities
LATEST_JOB_NUMBER = 5 LATEST_JOB_NUMBER = 5
scope :latest_jobs, -> { includes(:cities, :company).order('created_at DESC') } scope :latest_jobs, -> { includes(:cities, :company, :industries).order('created_at DESC') }
def normalize_friendly_id(string) def normalize_friendly_id(string)
string.to_s.to_slug.normalize(transliterations: :vietnamese).to_s string.to_s.to_slug.normalize(transliterations: :vietnamese).to_s
......
...@@ -6,34 +6,34 @@ ...@@ -6,34 +6,34 @@
| Result for: | Result for:
= @keyword = @keyword
.d-flex.justify-content-center.p-2 .d-flex.justify-content-center.p-2
= paginate @result_search, window: 1 = paginate @jobs, window: 1
.job-list .job-list
- @result_search.each do |job| - @jobs.each do |job|
.row.bg-white .row.bg-white
.col-10.p-3.card-body.text-dark .col-10.p-3.card-body.text-dark
h5.mb-1 h5.mb-1
= link_to query_job(job).title, detail_path(job['slug']) = link_to job.title, detail_path(job.slug)
p.mb-1 p.mb-1
= query_job(job).company.name = job.company.name
p.mb-1 p.mb-1
i.fas.fa-dollar-sign.m-1 i.fas.fa-dollar-sign.m-1
| Lương: | Lương:
= query_job(job).salary = job.salary
p.mb-1 p.mb-1
i.fas.fa-map-marker-alt.m-1 i.fas.fa-map-marker-alt.m-1
= query_job(job).cities.map(&:name).uniq.join(' | ') = job.cities.map(&:name).uniq.join(' | ')
p.mb-1 p.mb-1
i.fas.fa-map-marker-alt.m-1 i.fas.fa-map-marker-alt.m-1
= query_job(job).industries.map(&:name).uniq.join(' | ') = job.industries.map(&:name).uniq.join(' | ')
p.mb-1 p.mb-1
= truncate(query_job(job).overview, length: 250) = truncate(job.overview, length: 250)
.col-sm-2.p-3.favourite .col-sm-2.p-3.favourite
= render partial: "favorite_jobs/favorite", locals: { job: query_job(job) } = render partial: "favorite_jobs/favorite", locals: { job: job }
-if @result_search.any? -if @jobs.any?
.d-flex.justify-content-center.p-2 .d-flex.justify-content-center.p-2
= page_entries_info @result_search = page_entries_info @jobs
.d-flex.justify-content-center.p-2 .d-flex.justify-content-center.p-2
= paginate @result_search, window: 1 = paginate @jobs, window: 1
-else -else
h4.text-center h4.text-center
| Not have any jobs you need | Not have any jobs you need
\ No newline at end of file
...@@ -3,12 +3,11 @@ class SolrSearch ...@@ -3,12 +3,11 @@ class SolrSearch
@solr = RSolr.connect url: 'http://localhost:8983/solr/VeNJOB' @solr = RSolr.connect url: 'http://localhost:8983/solr/VeNJOB'
end end
def search(keyword) def search(keyword, current_page)
response = @solr.paginate 1, 2_147_483_647, 'select', params: { @solr.paginate current_page, 20, 'select', params: {
q: "cities_name: #{keyword} or title: #{keyword} or industries_name: #{keyword}* or company_name: #{keyword}*", q: "cities_name: #{keyword} or title: #{keyword} or industries_name: #{keyword} or company_name: #{keyword}",
fl: %w[job_id slug] fl: 'job_id'
} }
response['response']['docs']
end end
def add_data def add_data
......
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