Je suis actuellement la construction d'une application web d'offres d'emploi, j'ai deux types d'utilisateurs employeur et candidat. Je veux que les deux types d'utilisateurs à faire signer différents des pages mais une page de connexion, par exemple ce que Hired - Job Search Marketplace. Job Hunting Simplified! fait pour c'est formulaire d'inscription, voici ce que je l'ai fait jusqu'à présentDevise association polymorphe deux formulaires d'inscription et un formulaire de connexion
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
société /_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 %>
Comment puis-je créer ceci, merci d'avance.