Rails nested form on HABTM: how to prevent duplicate entry?

后端 未结 2 1250
被撕碎了的回忆
被撕碎了的回忆 2020-12-21 23:21

I have simple app with 3 tables in DB and \'many-to-many\' relationships.

# Model Employee
class Employee < ActiveRecord::Base
   has_and_belongs_to_many          


        
相关标签:
2条回答
  • 2020-12-22 00:04

    You can use rails validation to check uniqueness of record.

    In your model phonenumber.rb put following line,

    validates_uniqueness_of :column_name
    

    It will ensure that Phonenumber will have unique phone_numbers only.

    Now in controller you can check phone_number from params and if number is already exist then we will delete nested attributes fron params so that Phonenumber record wont generate.

     def create
       @phone_number = Phonenumber.where(:number=>params[:employee][:phonenumber][:number])
       if @phone_number.any?
          params[:employee].delete(:phonenumber)
          @employee = Employee.new(params[:employee])
          if @employee.save?
            @employee.phonenumber = @phone_number.first
            redirect_to :action => :index
          else
            render "new"
          end
       else
         @employee = Employee.new(params[:employee])
         @employee.save ? (redirect_to :action => :index) : (render "new")
       end
     end
    
    0 讨论(0)
  • 2020-12-22 00:05

    in employee.rb:

    before_save :get_phonenumbers
    
    
      def get_phonenumbers
        self.phonenumbers = self.phonenumbers.collect do |phonenumber|
          Phonenumber.find_or_create_by_number(phonenumber.number)
        end
      end
    

    I have found its working

    0 讨论(0)
提交回复
热议问题