0
我目前正在建立一个工作板web应用程序,我有两种类型的用户雇主和候选人。我想这两个类型的用户有不同的注册页面,但一个登录页面,例如什么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 %>
我该如何去创造这个,谢谢你的期待。