Commit edb1419c by Tô Ngọc Ánh

check authenticate favorite action, history view

parent e84e7846
Pipeline #983 canceled with stages
in 0 seconds
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
before_action :store_user_location!, if: :storable_location?
before_action :configure_permitted_parameters, if: :devise_controller? before_action :configure_permitted_parameters, if: :devise_controller?
protected protected
...@@ -7,4 +8,15 @@ class ApplicationController < ActionController::Base ...@@ -7,4 +8,15 @@ class ApplicationController < ActionController::Base
devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name, :curriculum_vitae]) devise_parameter_sanitizer.permit(:sign_up, keys: [:full_name, :curriculum_vitae])
devise_parameter_sanitizer.permit(:account_update, keys: [:full_name, :curriculum_vitae]) devise_parameter_sanitizer.permit(:account_update, keys: [:full_name, :curriculum_vitae])
end end
private
def storable_location?
request.get? && is_navigational_format? && !devise_controller? && !request.xhr?
end
def store_user_location!
# :user is the scope we are authenticating
store_location_for(:user, request.fullpath)
end
end end
class HistoriesController < ApplicationController
before_action :authenticate_user!
def index
histories = current_user.histories.select(:job_id).all
@jobs = Job.where(id: histories).includes(:company, :locations).limit(20)
end
end
...@@ -5,13 +5,14 @@ class JobsController < ApplicationController ...@@ -5,13 +5,14 @@ class JobsController < ApplicationController
object = params[:model].classify.constantize.find_by_slug(params[:slug]) object = params[:model].classify.constantize.find_by_slug(params[:slug])
@keyword = object.try(:name) || object.try(:city) @keyword = object.try(:name) || object.try(:city)
@jobs = object.jobs.all.includes(:company, :locations).page(params[:page]) @jobs = object.jobs.all.includes(:company, :locations).page(params[:page])
# @is_favorited = user_signed_in? ? current_user.favorites.find_by(job_id: )
end end
def show def show
@job = Job.find_by(id: params[:id]) @job = Job.find_by(id: params[:id])
return redirect_to root_path if @job.nil? return redirect_to root_path if @job.nil?
return @is_not_applied = true unless user_signed_in?
@is_not_applied = user_signed_in? ? current_user.applied_jobs.find_by(job_id: @job.id).blank? : true
@is_not_applied = current_user.applied_jobs.find_by(job_id: @job.id).blank?
current_user.histories.find_or_create_by(job_id: @job.id)
end end
end end
<%= form_tag new_applied_job_path, method: :get, enforce_utf8: false do %> <%= form_tag new_applied_job_path, method: :get, enforce_utf8: false do %>
<%= collection_radio_buttons(:job_id, params[:job_id], jobs, :id, :title) do |radio| %> <% jobs.each do |job| %>
<div id="favorited-<%= radio.object.id %>"> <div id="favorited-<%= job.id %>">
<div class='card flex-md-row align-items-center my-2'> <div class='card flex-md-row align-items-center my-2 p-2'>
<%= radio.radio_button(class: "ml-3") %> <%= radio_button_tag :job_id, job.id %>
<div class='card-body'> <div class='card-body'>
<%= link_to radio.object.title, job_path(radio.object), class: 'card-title font-weight-bold text-decoration-none' %> <%= link_to job.title, job_path(job), class: 'card-title font-weight-bold text-decoration-none' %>
<p class='card-text'><%= radio.object.company.name %></p> <p class='card-text'><%= job.company.name %></p>
<p class='mb-0'> <p class='mb-0'>
<strong>Work place:</strong> <strong>Work place:</strong>
<% radio.object.locations.each do |location| %> <% job.locations.each do |location| %>
<%= location.city %> <%= location.city %>
<% end %> <% end %>
</p> </p>
<p><strong>Salary: </strong><%= radio.object.salary %></p> <p><strong>Salary: </strong><%= job.salary %></p>
<p class='card-text'><%= strip_tags(radio.object.description).truncate(Job::WORDS_SHORT_DESCRIPTION) %></p> <p class='card-text'><%= strip_tags(job.description).truncate(Job::WORDS_SHORT_DESCRIPTION) %></p>
</div> </div>
<%= link_to 'Remove', job_favorite_path(radio.object.id), <%= link_to 'Remove', job_favorite_path(job.id),
method: :delete, class: 'btn btn-danger btn-lg m-2', remote: true, method: :delete, class: 'btn btn-danger btn-lg', remote: true,
data: { disable_with: '<i class="fa fa-spinner fa-spin"></i>'.html_safe } %> data: { disable_with: '<i class="fa fa-spinner fa-spin"></i>'.html_safe } %>
</div> </div>
</div> </div>
......
<%= form_tag new_applied_job_path, method: :get, enforce_utf8: false do %>
<% jobs.each do |job| %>
<div class='card flex-md-row align-items-center my-2 p-2'>
<%= radio_button_tag :job_id, job.id %>
<div class='card-body'>
<%= link_to job.title, job_path(job), class: 'card-title font-weight-bold text-decoration-none' %>
<p class='card-text'><%= job.company.name %></p>
<p class='mb-0'>
<strong>Work place:</strong>
<% job.locations.each do |location| %>
<%= location.city %>
<% end %>
</p>
<p><strong>Salary: </strong><%= job.salary %></p>
<p class='card-text'><%= strip_tags(job.description).truncate(Job::WORDS_SHORT_DESCRIPTION) %></p>
</div>
</div>
<% end %>
<div class="actions text-center">
<%= submit_tag 'Apply Now', name: nil, class: 'btn btn-outline-success btn-lg' %>
</div>
<% end %>
<div class="my-4">
<h3 class='text-center'>History Jobs</h3>
<hr class="divider">
<div class='content'>
<%= render 'histories/job', jobs: @jobs if @jobs.any? %>
</div>
</div>
\ No newline at end of file
...@@ -10,13 +10,13 @@ ...@@ -10,13 +10,13 @@
<ul class='navbar-nav ml-auto'> <ul class='navbar-nav ml-auto'>
<% if user_signed_in? %> <% if user_signed_in? %>
<li class="nav-item"> <li class="nav-item">
<%= link_to my_favorites_path, class: 'nav-link text-white', title: 'Favorite' do %> <%= link_to favorites_path, class: 'nav-link text-white', title: 'Favorite' do %>
<small><%= current_user.favorites.size %></small> <small><%= current_user.favorites.size %></small>
<i class="fas fa-heart"></i> <i class="fas fa-heart"></i>
<% end %> <% end %>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<%= link_to '#', class: 'nav-link text-white', title: 'History' do %> <%= link_to histories_path, class: 'nav-link text-white', title: 'History' do %>
<i class="fas fa-history"></i> <i class="fas fa-history"></i>
<% end %> <% end %>
</li> </li>
......
...@@ -73,7 +73,7 @@ Devise.setup do |config| ...@@ -73,7 +73,7 @@ Devise.setup do |config|
# config.http_authenticatable = false # config.http_authenticatable = false
# If 401 status code should be returned for AJAX requests. True by default. # If 401 status code should be returned for AJAX requests. True by default.
# config.http_authenticatable_on_xhr = true config.http_authenticatable_on_xhr = false
# The realm used in Http Basic Authentication. 'Application' by default. # The realm used in Http Basic Authentication. 'Application' by default.
# config.http_authentication_realm = 'Application' # config.http_authentication_realm = 'Application'
...@@ -251,7 +251,7 @@ Devise.setup do |config| ...@@ -251,7 +251,7 @@ Devise.setup do |config|
# should add them to the navigational formats lists. # should add them to the navigational formats lists.
# #
# The "*/*" below is required to match Internet Explorer requests. # The "*/*" below is required to match Internet Explorer requests.
# config.navigational_formats = ['*/*', :html] config.navigational_formats = ['*/*', :html, :json, :js]
# The default HTTP method used to sign out a resource. Default is :delete. # The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :delete config.sign_out_via = :delete
......
Rails.application.routes.draw do Rails.application.routes.draw do
root to: 'home#index' root to: 'home#index'
devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' } devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations' }
get 'cities', to: 'locations#index' get 'cities', to: 'locations#index'
get 'industries', to: 'industries#index' get 'industries', to: 'industries#index'
get 'detail/:id', to: 'jobs#show', as: :job get 'detail/:id', to: 'jobs#show', as: :job
get 'jobs/:model/:slug', to: 'jobs#index', as: :jobs get 'jobs/:model/:slug', to: 'jobs#index', as: :jobs
get 'my', to: 'users#my_page', as: :my_page get 'my', to: 'users#my_page', as: :my_page
get 'my/jobs', to: 'applied_jobs#index', as: :my_applied_jobs get 'my/jobs', to: 'applied_jobs#index', as: :my_applied_jobs
get 'my/favorite', to: 'favorites#index', as: :my_favorites
post 'jobs/:job_id/favorites', to: 'favorites#create', as: :job_favorites post 'jobs/:job_id/favorites', to: 'favorites#create', as: :job_favorites
delete 'jobs/:job_id/favorites', to: 'favorites#destroy', as: :job_favorite delete 'jobs/:job_id/favorites', to: 'favorites#destroy', as: :job_favorite
resources :favorites, only: :index
resources :histories, only: :index
resources :users, only: :show resources :users, only: :show
get 'apply', to: 'applied_jobs#new', as: :new_applied_job get 'apply', to: 'applied_jobs#new', as: :new_applied_job
post 'confirm', to: 'applied_jobs#confirm', as: :confirm_applied_job post 'confirm', to: 'applied_jobs#confirm', as: :confirm_applied_job
post 'finish', to: 'applied_jobs#finish', as: :finish_applied_job post 'finish', to: 'applied_jobs#finish', as: :finish_applied_job
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end end
window.location = '/users/sign_in';
\ No newline at end of file
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