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
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
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