2016-10-24 1 views
0

Je veux générer un Employee_ID avec une série, j'ai fixé un ID d'employé initial dans la table de base de données. le format est "E36162000", je prends le dernier identifiant de l'employé de la table puis extrait seulement la valeur entière puis ajoute un, ce sera le suivant employee id.méthode non définie `gsub 'pour nil: NilClass ou comment utiliser la méthode gsub dans les rails

Mais dans ce gsub() méthode ne fonctionne pas, nombre entier d'extrait de méthode gsub est parfaitement lien suivant employee_id = E36162001

Mais quand je suis soumettons erreur vient. J'envoie le code et écran de tri s'il vous plaît aidez-moi

_employee_details.html.erb - ceci est mon avis

<div class="modal-body"> 
    <h2 class="text-center">Add <span>Employee Details</span></h2> 
    <div class="post-new-job head-border"> 
     <div class="alert alert-success" role="alert" id='success-job' style='display:none;'>Employee Details is successfully added.</div> 
     <div class="form-body">    
      <%= form_for(:employee_details, :url => {:controller => 'hr', :action => 'create'}) do |f| %>     
       <div class="col-md-12"> 
       <!--auto generate emp id--> 
       <% @last_emp_id = EmployeeDetail.select("employee_id").last %> 
       <% emp_id = @last_emp_id.employee_id %> 
       <% emp_id_sub = emp_id.gsub(/[^\d]/, '') %> 
       <% auto_generate_id = 'E'.to_s + (emp_id_sub.to_i + 1).to_s %> 
       <h1> Employee ID : <%= auto_generate_id %> </h1> 


       <div class="mydata"> 
       <%= f.hidden_field :offer_letter_id, { class: 'form-control', id: 'recipient-name' } %> 
       </div> 

       <div class="form-group"> 
        <label class="control-label">Employee ID</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-user"></i> </span> 
         <%= f.text_field :employee_id, { :value => auto_generate_id, :disabled=>true , :required => true, placeholder: 'E12345678', class: 'form-control' } %> 
        </div> 
        </div> 

        <div class="form-group"> 
        <label class="control-label">Bank Account</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-university"></i> </span> 
         <%= f.text_field :bank_ac, {placeholder: '06464060852634865', class: 'form-control' } %> 
        </div> 
        </div> 

        <div class="form-group"> 
        <label class="control-label">Bank IFSC Code</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-code"></i> </span> 
         <%= f.text_field :bank_ifsc, {placeholder: 'SBI', class: 'form-control' } %> 
        </div> 
        </div> 

        <div class="form-group"> 
        <label class="control-label">End of Date</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-calendar"></i> </span> 
         <%= f.text_field :work_end_date, { placeholder: 'MM/DD/YYYY', id: 'datepicker', class:"datepicker_style" } %> 
        </div> 
        </div> 

        <div class="form-group"> 
        <label class="control-label">Gender</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-male fa-female"></i> </span> 
         <%= f.select :gender, ['Male', 'Female'], { }, class: "form-control" %> 
        </div> 
        </div> 

        <div class="form-group"> 
        <label class="control-label">Spouse Name</label> 
        <div class="input-group"> <span class="input-group-addon"> <i class="fa fa-user"></i> </span> 
         <%= f.text_field :spouse_name, { placeholder: 'Father/Mother/Wife name', class: "form-control" } %> 
        </div> 
        </div> <br> 

        <div class="form-group"> 
        <a><%= f.submit "Add Employee Details", :class => "btn btn-primary" %></a> 
        </div> 
       </div> 
       <div class="col-md-2"></div>     
      <%- end -%> 
     </div>  
    </div> 
    </div> 

employee_details.rb - c'est mon modèle

class EmployeeDetail < ActiveRecord::Base 
    belongs_to :user 
    validates :offer_letter_id, presence: true 
end 

hr_controller.rb - ceci est mon contrôleur

class HrController < ApplicationController 
def new 
    @employees = EmployeeDetail.new 
end 

# edit employee information 
def edit 
    @employees = EmployeeDetail.find(params[:id]) 
end 

def create 
    @employees = EmployeeDetail.new(employee_params) 
    if @employees.save 
     redirect_to :action => 'internal_employee_page' 
    else 
     redirect_to :action => 'internal_employee_page' 
    end 
end 

def show 
    @employees = EmployeeDetail.find(params[:id]) 
end 

def update 
    @employees = EmployeeDetail.find(params[:id]) 

    if @employees.update(employee_params) 
     redirect_to :action => 'internal_employee_page' 
    else 
     redirect_to :action => 'internal_employee_page' 
    end 
end 

private 

    def employee_params 
     params.require(:employee_details).permit(:offer_letter_id, :employee_id, :bank_ac, :bank_ifsc, :spouse_name, :gender, :work_end_date) 
    end  
end 

ma mise en page Voir enter image description here

** Erreur dans cette ligne **

<% emp_id_sub = emp_id.gsub(/[^\d]/, '') %>

erreur est enter image description here

Quand suis-je Cliquez sur le bouton d'envoi puis l'erreur est de générer des données mais est enregistrer dans la table employee_details sauf employee_id

Répondre

1

Vous pourriez ne pas avoir le emp_id. Essayez de changer le code,

<% @last_emp_id = EmployeeDetail.select("employee_id").last %> 
<% emp_id = @last_emp_id.employee_id %> 
<% emp_id_sub = emp_id.present? ? emp_id.gsub(/[^\d]/, '') : ''%> 
<% auto_generate_id = emp_id_sub.length > 0 ? ? ('E'.to_s + (emp_id_sub.to_i + 1).to_s) : "" %> 
<h1> Employee ID : <%= auto_generate_id %> </h1> 

vérifier la présence de emp_id puis emp_id_sub

Mise à jour: Ajout d'une requête de l'échantillon à l'aide de sélection selon le commentaire de @mudasobwa

2.3.1 :015 > @user = User.select("email").last 
    User Load (0.5ms) SELECT `users`.`email` FROM `users` ORDER BY `users`.`id` DESC LIMIT 1 

=> #<User id: nil, email: "[email protected]"> 

2.3.1 :016 > email = @user.email 
=> "[email protected]" 
+0

qui a dit que j'est nul, je l'ai essayé avec mon code et seulement affiché ma réponse. – Sravan

+0

Dois-je coller ma requête dans la question? – Sravan

+0

@ mudasobwa, pls vérifier l'exemple de requête en utilisant select dans ma réponse. – Sravan

0

Nous pouvons créer aussi une méthode dans le modèle et nous pouvons appeler before_save, à chaque fois que vous créez un nouveau salarié, alors avant d'enregistrer, il sera exécuté et stockera l'identifiant de l'employé dans la base de données

class EmployeeDetail < ActiveRecord::Base 
belongs_to :user 
validates :offer_letter_id, presence: true 
# auto generate employee id 
before_save :Auto_generate_emp_id 

def Auto_generate_emp_id 
    @last_emp_id = EmployeeDetail.order("employee_id").last 
    emp_id = @last_emp_id.employee_id 
    emp_id_sub = emp_id.gsub(/[^\d]/, '') 
    auto_generate_id = 'E'.to_s + (emp_id_sub.to_i + 1).to_s 
    self.employee_id = auto_generate_id 
end 

fin