首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向title.parameterize添加一个数字,以通过唯一性验证

问向title.parameterize添加一个数字,以通过唯一性验证
EN

Stack Overflow用户
提问于 2013-04-10 06:20:20
回答 1查看 102关注 0票数 1

我正在为after_create回调上的帖子创建一个插件,如果该插件已经存在,我不确定如何在末尾附加一个数字。

代码语言:javascript
复制
class Post < ActiveRecord::Base
  attr_accessible :body, :title, :slug
  after_create :create_slug
  validates_uniqueness_of :slug

  def create_slug
    existing = Post.where("slug LIKE ?", "#{title.parameterize}%").length
    existing > 0 ? slug = "#{title.parameterize}-#{existing+1}" : slug = title.parameterize
    self.update_attributes(slug: slug)
  end
end

例如,这不起作用,因为我的where子句匹配标题为"Some title That is Different“的帖子。

一种解决方案是附加post.id,而不是尝试枚举。在帖子被删除的情况下,这也可能更好。但我不希望删除任何帖子,而且不使用I似乎更有意义。

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-10 06:31:56

将会

代码语言:javascript
复制
Post.where(title: title).count

在你的情况下给你正确的号码?

在DB中的slug列上设置唯一约束也很重要,因为如果在相似的时间创建具有相同标题的两个帖子,则此算法会受到竞争条件的影响。Rails本身不能保证列的唯一性。

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

https://stackoverflow.com/questions/15913606

复制
相关文章

相似问题

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