Commit 472bd1df by Ngô Trung Hưng

create job list

parent b73cf713
Pipeline #802 canceled with stages
in 0 seconds
...@@ -28,6 +28,7 @@ gem 'jbuilder', '~> 2.5' ...@@ -28,6 +28,7 @@ gem 'jbuilder', '~> 2.5'
# gem 'bcrypt', '~> 3.1.7' # gem 'bcrypt', '~> 3.1.7'
gem 'nokogiri' gem 'nokogiri'
gem 'whenever' gem 'whenever'
gem 'kaminari'
# Use ActiveStorage variant # Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8' # gem 'mini_magick', '~> 4.8'
......
...@@ -84,6 +84,18 @@ GEM ...@@ -84,6 +84,18 @@ GEM
io-like (0.3.1) io-like (0.3.1)
jbuilder (2.10.0) jbuilder (2.10.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
kaminari (1.2.1)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.2.1)
kaminari-activerecord (= 1.2.1)
kaminari-core (= 1.2.1)
kaminari-actionview (1.2.1)
actionview
kaminari-core (= 1.2.1)
kaminari-activerecord (1.2.1)
activerecord
kaminari-core (= 1.2.1)
kaminari-core (1.2.1)
listen (3.1.5) listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4) rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7) rb-inotify (~> 0.9, >= 0.9.7)
...@@ -199,6 +211,7 @@ DEPENDENCIES ...@@ -199,6 +211,7 @@ DEPENDENCIES
chromedriver-helper chromedriver-helper
coffee-rails (~> 4.2) coffee-rails (~> 4.2)
jbuilder (~> 2.5) jbuilder (~> 2.5)
kaminari
listen (>= 3.0.5, < 3.2) listen (>= 3.0.5, < 3.2)
mysql2 (>= 0.4.4, < 0.6.0) mysql2 (>= 0.4.4, < 0.6.0)
nokogiri nokogiri
......
...@@ -13,4 +13,5 @@ ...@@ -13,4 +13,5 @@
//= require rails-ujs //= require rails-ujs
//= require activestorage //= require activestorage
//= require turbolinks //= require turbolinks
//= require jquery.min
//= require_tree . //= require_tree .
...@@ -2,4 +2,38 @@ ...@@ -2,4 +2,38 @@
# Job controller # Job controller
class JobController < ApplicationController class JobController < ApplicationController
before_action :load_data_dropdown, only: %i[find_jobs_by_industry find_jobs_by_city find_jobs_by_company]
def find_jobs_by_city
city = City.find(params[:key_city])
result(city)
end
def find_jobs_by_industry
industry = Industry.find(params[:key_industry])
result(industry)
end
def find_jobs_by_company
company = Company.find(params[:key_company])
result(company)
end
def find_jobs_by(model, parameter)
obj = model.find(parameter)
result(obj)
end
private
def load_data_dropdown
@industries = Industry.order(name: :asc).all
@cities = City.select(:id, :name)
end
def result(obj)
@keyword = obj.name
@data = obj.jobs.page(params[:page])
render 'result_data'
end
end end
...@@ -5,6 +5,7 @@ class City < ApplicationRecord ...@@ -5,6 +5,7 @@ class City < ApplicationRecord
RANGE = 69 RANGE = 69
has_many :city_jobs has_many :city_jobs
has_many :jobs, through: :city_jobs has_many :jobs, through: :city_jobs
enum area: { international: 0, domestic: 1 }
scope :domestic, -> { where(area: 1) } scope :domestic, -> { where(area: 1) }
scope :international, -> { where(area: 0) } scope :international, -> { where(area: 0) }
scope :all_cities, -> { select :id, :name } scope :all_cities, -> { select :id, :name }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="col-lg-3 col-md-4"> <div class="col-lg-3 col-md-4">
<div class="box_cityjobs"> <div class="box_cityjobs">
<div class="box_cityjobs_name"> <div class="box_cityjobs_name">
<%= link_to city.name, '#', class: 'cityjobs_link' %> <%= link_to city.name, "/jobs/city/#{city.id}", class: 'cityjobs_link' %>
</div> </div>
<div class="box_cityjobs_count"> <div class="box_cityjobs_count">
<span><%= city.jobs.count %> Công việc</span> <span><%= city.jobs.count %> Công việc</span>
......
...@@ -31,23 +31,13 @@ ...@@ -31,23 +31,13 @@
<div class="icon_list"> <div class="icon_list">
<i class="fa fa-list-ul" aria-hidden="true"></i> <i class="fa fa-list-ul" aria-hidden="true"></i>
</div> </div>
<select class="show_list_industries"> <%= select_tag 'industry', options_from_collection_for_select(@industries, "id", "name"), class: 'show_list_industries' %>
<option value="*" selected disabled hidden class="select_first">Tất cả ngành nghề</option>
<% @industries.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
<div class="search_location"> <div class="search_location">
<div class="icon_list"> <div class="icon_list">
<i class="fas fa-map-marker-alt"></i> <i class="fas fa-map-marker-alt"></i>
</div> </div>
<select class="show_list_cities"> <%= select_tag 'city', options_from_collection_for_select(@cities, "id", "name", "1"), class: 'show_list_cities' %>
<option value="*" selected disabled hidden class="select_first">Tất cả Tỉnh thành</option>
<% @cities.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
<div class="search_submit"> <div class="search_submit">
<button type="submit" class="btn_search_submit"> <button type="submit" class="btn_search_submit">
...@@ -72,23 +62,13 @@ ...@@ -72,23 +62,13 @@
<div class="icon_list"> <div class="icon_list">
<i class="fa fa-list-ul" aria-hidden="true"></i> <i class="fa fa-list-ul" aria-hidden="true"></i>
</div> </div>
<select class="show_list_industries"> <%= select_tag 'industry', options_from_collection_for_select(@industries, "id", "name"), class: 'show_list_industries' %>
<option value="*" selected disabled hidden class="select_first">Tất cả ngành nghề</option>
<% @industries.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
<div class="search_location"> <div class="search_location">
<div class="icon_list"> <div class="icon_list">
<i class="fas fa-map-marker-alt"></i> <i class="fas fa-map-marker-alt"></i>
</div> </div>
<select class="show_list_cities"> <%= select_tag 'city', options_from_collection_for_select(@cities, "id", "name", "1"), class: 'show_list_cities' %>
<option value="*" selected disabled hidden class="select_first">Tất cả Tỉnh thành</option>
<% @cities.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
<div class="search_submit"> <div class="search_submit">
<button type="submit" class="btn_search_submit"> <button type="submit" class="btn_search_submit">
...@@ -112,22 +92,12 @@ ...@@ -112,22 +92,12 @@
</div> </div>
<div class="col-sm-6 col-xs-12"> <div class="col-sm-6 col-xs-12">
<div class="search_industries_mobile"> <div class="search_industries_mobile">
<select class="show_list_industries_mobile"> <%= select_tag 'industry', options_from_collection_for_select(@industries, "id", "name"), class: 'show_list_industries_mobile' %>
<option value="*" selected disabled hidden class="select_first">Tất cả ngành nghề</option>
<% @industries.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
</div> </div>
<div class="col-sm-6 col-xs-12"> <div class="col-sm-6 col-xs-12">
<div class="search_location_mobile"> <div class="search_location_mobile">
<select class="show_list_cities_mobile"> <%= select_tag 'city', options_from_collection_for_select(@cities, "id", "name", "1"), class: 'show_list_cities_mobile' %>
<option value="*" selected disabled hidden class="select_first">Tất cả Tỉnh thành</option>
<% @cities.each do |val| %>
<option value="<%= val.id %>"><%= val.name %></option>
<% end %>
</select>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -8,10 +8,11 @@ ...@@ -8,10 +8,11 @@
<div class="col-lg-4 col-md-4 col-sm-6 col-xs-12"> <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
<div class="box_info_city"> <div class="box_info_city">
<div class="ct_name"> <div class="ct_name">
<%= link_to city.name, '#' ,class: 'link_ct' %> <!-- <%= link_to city.name, "/jobs/city/#{city.id}" ,class: 'link_ct' %> -->
<%= link_to city.name, "/jobs/city/#{city.id}" ,class: 'link_ct' %>
</div> </div>
<div class="ct_jobs_count"> <div class="ct_jobs_count">
<%= link_to "#{city.jobs.count} công việc", '#' ,class: 'link_ct' %> <%= link_to "#{city.jobs.count} công việc", "/jobs/city/#{city.id}" ,class: 'link_ct' %>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
<div class="col-lg-4 col-md-4 col-sm-6 col-xs-12"> <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
<div class="box_info_city"> <div class="box_info_city">
<div class="ct_name"> <div class="ct_name">
<%= link_to industry.name, '#', class: 'link_ct' %> <%= link_to industry.name, "/jobs/industry/#{industry.id}", class: 'link_ct' %>
</div> </div>
<div class="ct_jobs_count"> <div class="ct_jobs_count">
<%= link_to "#{industry.jobs.count} công việc", '#', class: 'link_ct' %> <%= link_to "#{industry.jobs.count} công việc", "/jobs/industry/#{industry.id}", class: 'link_ct' %>
</div> </div>
</div> </div>
</div> </div>
......
<div class="col-lg-3 col-md-4"> <div class="col-lg-3 col-md-4">
<div class="box_cityjobs"> <div class="box_cityjobs">
<div class="box_cityjobs_name"> <div class="box_cityjobs_name">
<%= link_to industry.name, '#', class: 'cityjobs_link' %> <%= link_to industry.name, "/jobs/industry/#{industry.id}", class: 'cityjobs_link' %>
</div> </div>
<div class="box_cityjobs_count"> <div class="box_cityjobs_count">
<span><%= industry.jobs.count %> Công việc</span> <span><%= industry.jobs.count %> Công việc</span>
......
<%cru = 0%>
<div class="container">
<div class="row">
<div class="col-sm-12">
<div class="box_jobs">
<div class="col-sm-12 d-block d-sm-none">
<% if cru == 1 %>
<div class="link_favorite_top block_link_favorite md">
<span><%= link_to '<i class="far fa-heart"></i>'.html_safe,'#',class: 'link_favorite'%><span>
</div>
<% else %>
<div class="block_click_favorite link_favorite_top ">
<span><i class="far fa-heart"></i><span>
</div>
<% end %>
</div>
<div class="row">
<div class="col-sm-10 col-md-9 col-lg-10">
<div class="box_info">
<div class="lol">
<%= link_to data.name, '#', class: 'job_name' %>
</div>
<div class="cop">
<h5 class="box_info_copany_name"><i class="far fa-building"></i> <%= data.company.name %></h5>
</div>
<div class="loc">
<h5 class="box_info_location"><i class="fas fa-map-marker-alt"></i>
<% dt = [] %>
<% data.cities.each do |x| %>
<% dt << (x.name << ' | ') %>
<% end %>
<%= dt.join('').chomp('| ')%>
</h5>
</div>
<h5 class="box_info_salary"><i class="fas fa-dollar-sign"></i>&nbsp; Lương: <%= data.salary %></h5>
<div class="coc">
<h5 class="box_info_des"><%= strip_tags(data.description) %></h5>
</div>
</div>
</div>
<div class="col-sm-2 col-md-3 d-none d-sm-block col-lg-2">
<% if cru == 1 %>
<div class="box_link_favotite">
<div class="block_link_favorite lg">
<span><i class="far fa-heart"></i> <%= link_to 'Yêu thích'.html_safe,'#',class: 'link_favorite'%><span>
</div>
<div class="block_link_favorite md">
<span><%= link_to '<i class="far fa-heart"></i>'.html_safe,'#',class: 'link_favorite'%><span>
</div>
</div>
<% else %>
<div class="box_link_favotite">
<div class="block_click_favorite lg">
<span><i class="far fa-heart"></i> Yêu thích<span>
</div>
<div class="block_click_favorite md">
<span><i class="far fa-heart"></i><span>
</div>
</div>
<% end %>
</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
<% provide(:title ,'Kết quả tìm kiếm') %>
<%= render 'home/banner_and_search' %>
<div class="padding_index"></div>
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="breadcrumb_total_search">
<span class="breadcrumb-item active">
&nbsp;<b><%= @data.total_count %></b>&nbsp;kết quả phù hợp với từ khóa&nbsp;<b><%= @keyword %></b>&nbsp;
</span>
</div>
</div>
<div class="col-lg-12">
<div class="breadcrumb_total_search_pagination_jobs">
<div class="pagination_jobs">
<div class="paginator">
<%= paginate @data %>
</div>
</div>
</div>
</div>
</div>
</div>
<%= render 'job/modal_login'%>
<%= render partial: 'block_info_job', collection: @data, as: :item %>
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="breadcrumb_total_search_pagination_jobs">
<div class="pagination_jobs">
<div class="paginator">
<%= paginate @data %>
</div>
</div>
</div>
</div>
</div>
</div>
<%= render 'shared/scroll_top' %>
<li class="page-item">
<%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, remote: remote, class: 'page-link' %>
</li>
<li class='page-item disabled'>
<%= link_to raw(t 'views.pagination.truncate'), '#', class: 'page-link' %>
</li>
<li class="page-item">
<%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, remote: remote, class: 'page-link' %>
</li>
<li class="page-item">
<%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, rel: 'next', remote: remote, class: 'page-link' %>
</li>
<% if page.current? %>
<li class="page-item active">
<%= content_tag :a, page, data: { remote: remote }, rel: page.rel, class: 'page-link' %>
</li>
<% else %>
<li class="page-item">
<%= link_to page, url, remote: remote, rel: page.rel, class: 'page-link' %>
</li>
<% end %>
<%= paginator.render do %>
<nav>
<ul class="pagination">
<%= first_page_tag unless current_page.first? %>
<%= prev_page_tag unless current_page.first? %>
<% each_page do |page| %>
<% if page.left_outer? || page.right_outer? || page.inside_window? %>
<%= page_tag page %>
<% elsif !page.was_truncated? -%>
<%= gap_tag %>
<% end %>
<% end %>
<%= next_page_tag unless current_page.last? %>
<%= last_page_tag unless current_page.last? %>
</ul>
</nav>
<% end %>
<li class="page-item">
<%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, rel: 'prev', remote: remote, class: 'page-link' %>
</li>
# frozen_string_literal: true
Kaminari.configure do |config|
config.default_per_page = 20
# config.max_per_page = nil
config.window = 3
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
# config.max_pages = nil
# config.params_on_first_page = false
end
Rails.application.routes.draw do # frozen_string_literal: true
Rails.application.routes.draw do
root 'home#index' root 'home#index'
get 'industry/index' get 'industry/index'
get 'city/index' get 'city/index'
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
# Search
get 'jobs/industry/:key_industry', to: 'job#find_jobs_by_industry'
get 'jobs/company/:key_company', to: 'job#find_jobs_by_company'
get 'jobs/city/:key_city', to: 'job#find_jobs_by_city'
end end
...@@ -5,7 +5,7 @@ require 'open-uri' ...@@ -5,7 +5,7 @@ require 'open-uri'
# rake task # rake task
namespace :crawler do namespace :crawler do
task populate: :environment do task populate: :environment do
NUMBER_LINK_WILL_BE_CRAWLER = 5 NUMBER_LINK_WILL_BE_CRAWLER = 1
Company.find_or_create_by(name: 'Bảo mật') do |company| Company.find_or_create_by(name: 'Bảo mật') do |company|
company.address = 'Vui lòng xem trong mô tả công việc' company.address = 'Vui lòng xem trong mô tả công việc'
company.short_description = 'Vui lòng xem trong mô tả công việc' company.short_description = 'Vui lòng xem trong mô tả công việc'
......
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