module MemberSlug extend ActiveSupport::Concern included do field :uid, type: String index({ uid: 1}, { unique: true }) validates_uniqueness_of :uid before_create :generate_uid end def to_param if self.uid.blank? generate_uid self.save end (self.name.gsub(/[ "'*@#$%^&()+=;:.,?>|\\\/<~_!:,、。!?;「」〈〉【】/]/,'-')+"-"+self.uid).gsub(/-{2,}/,'-') rescue "-"+self.uid end private def generate_uid self.uid = rand(10**8).to_s self.save if self.class.where(:uid=>self.uid).size > 0 end end