2017-04-13 136 views
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 %> 

我该如何去创造这个,谢谢你的期待。

回答

1

我不确定我完全理解你的问题,但在我看来,你只需要有两个不同的sign_up页面,因为登录你可以使用devise的默认登录。

我会写一个自定义RegistrationControllerDevise::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