首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Quora样的重复鼻涕虫

Quora样的重复鼻涕虫
EN

Stack Overflow用户
提问于 2014-07-11 21:34:26
回答 1查看 116关注 0票数 1

我一直在寻找这个问题的答案,但似乎找不到答案。

基本上,我想做的是类似Quora的Url结构,如果一个概要文件名为Thomas ,那么它就变成如果站点上已经有一个Thomas,那么它就会变成quora.com/thomas-jefferson-1,,等等。

FriendlyId gem有一些类似的东西,但它们不是递增,而是生成一个SecureRandom字符串,这有点难看。

到目前为止,我有一个Rails模型,其外观如下:

代码语言:javascript
复制
class Profile < ActiveRecord::Base
   before_create :generate_slug

   def generate_slug do
      self.slug = loop do
         slug = to_slug(self.name)
         break slug unless Profile.exists?(slug: slug)
      end
   end

  def to_slug(name)
     self.transliterate.downcase.gsub(/[^a-z0-9 ]/, ' ').strip.gsub(/[ ]+/, '-')
  end
end
EN

回答 1

Stack Overflow用户

发布于 2014-07-11 21:59:26

我假设您在概要表中的name列上有一个索引。

您可以向数据库发出查询,以获取所有条目,如当前生成的段塞,并获取最大值。如果数据库不返回任何内容,请使用当前段塞,否则,解析最大段塞的整数部分,并将其与1一起递增以获得一个新的段塞。

代码语言:javascript
复制
def generate_slug
  slug = to_slug(self.name)
  max_slug = Profile.where("slug like '#{slug}-%'").max.try(:slug)
  self.slug = max_slug.present? ? slug : compute(slug, max_slug)
end

def compute(slug, max_slug)
  max_count = max_slug.gsub("#{slug}-", "").to_i + 1
  "#{slug}-#{max_count}"
end

*未经测试的代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24706916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档