class Key < ActiveRecord::Base attr_accessible :expire, :is_valid, :typ belongs_to :parent, :polymorphic => true belongs_to :user before_create :create_unique_identifier def create_unique_identifier begin self.uuid = SecureRandom.hex(10) # or whatever you chose like UUID tools end while self.class.exists?(:uuid => uuid) end def self.find_or_create(user, typ, parent=nil) if parent.nil? || !parent kk=Key.where(user_id: user.id, typ: typ, is_valid: true).first if kk.nil? kk=Key.new kk.user=user kk.typ = typ kk.is_valid = true kk.save end else kk=Key.where(user_id: user.id, typ: typ, is_valid: true, parent_type: parent.class.to_s, parent_id: parent.id).first if kk.nil? kk=Key.new kk.user=user kk.typ = typ kk.is_valid = true kk.parent=parent kk.save end end kk end end