我目前正在构建一个招聘网络应用程序,我有两种类型的用户雇主和候选人。我希望这两种类型的用户拥有不同的注册页面但只有一个登录页面,例如Hired - Job Search Marketplace. Job Hunting Simplified!正在为其注册表格做什么,这里是我做过的事情到目前为止
的routes.rb
Rails.application.routes.draw do
root 'home#index'
resources :profiles, except: [:new, :create]
resources :companies, except: [:new, :create]
devise_for :users, skip: [:registrations, :sessions]
devise_scope :user do
get '/login' => 'devise/sessions#new', as: 'new_user_session'
post '/login' => 'devise/sessions#create', as: 'user_session'
match 'logout', to: 'devise/sessions#destroy', as: :destroy_user_session, via: Devise.mappings[:user].sign_out_via
end
get '/new_employer' => 'companies#new', as: 'new_employer'
post '/new_employer' => 'companies#create'
get '/new_applicant' => 'profiles#new', as: 'new_applicant'
post '/new_applicant' => 'profiles#create'
end
User.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
belongs_to :user_profile, polymorphic: true
scope :employer?, -> { where(user_profile_type: 'Company') }
scope :applicant?, -> { where(user_profile_type: 'Profile') }
scope :admin?, -> { where(admin: true) }
end
Companies_controller.rb
class CompaniesController < ApplicationController
before_action :set_company, only: [:show, :edit, :update, :destroy]
# GET /companies
# GET /companies.json
def index
@companies = Company.all
end
# GET /companies/1
# GET /companies/1.json
def show
end
# GET /companies/new
def new
@company = Company.new
@company.build_user
end
# GET /companies/1/edit
def edit
end
# POST /companies
# POST /companies.json
def create
@company = Company.new(company_params)
respond_to do |format|
if @company.save
format.html { redirect_to @company, notice: 'Company was successfully created.' }
format.json { render :show, status: :created, location: @company }
else
format.html { render :new }
format.json { render json: @company.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /companies/1
# PATCH/PUT /companies/1.json
def update
respond_to do |format|
if @company.update(company_params)
format.html { redirect_to @company, notice: 'Company was successfully updated.' }
format.json { render :show, status: :ok, location: @company }
else
format.html { render :edit }
format.json { render json: @company.errors, status: :unprocessable_entity }
end
end
end
# DELETE /companies/1
# DELETE /companies/1.json
def destroy
@company.destroy
respond_to do |format|
format.html { redirect_to companies_url, notice: 'Company was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_company
@company = Company.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def company_params
# params.require(:company).permit(:company_name, :company_website)
params.require(:company).permit!
end
end
公司/ _form.html.erb
<%= simple_form_for(@company, url: new_employer_path) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :company_name %>
<%= f.input :company_website %>
</div>
<%= f.simple_fields_for :user do |u| %>
<div class="col-lg-6">
<%= u.input :email %>
</div>
<div class="col-lg-6">
<%= u.input :password %>
</div>
<div class="col-lg-6">
<%= u.input :password_confirmation %>
</div>
<% end %>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我如何创造这个,谢谢你的预期。
答案 0 :(得分:1)
我不确定我是否完全理解您的问题,但在我看来,您只需要有两个不同的sign_up页面,因为登录时您可以使用devise的默认登录。
我会写一个自定义RegistrationController
并继承自Devise::RegistrationsController
你可以让你的路线设置如下:
devise_for :users, controllers: { registrations: 'registrations' }
devise_scope :user do
post '/user/create_applicant', to: 'registrations#create_applicant'
post '/user/create_employer', to: 'registrations#create_employer'
end
然后你可以像这样创建registrations_controller
class RegistrationsController < Devise::RegistrationsController
def create_applicant
# write your logic here
end
def create_employer
# write your logic here
end
end