2

如果已经有john-doe-1 ,我想给John Doe永久链接john-doe-2。该数字应该是下一个要附加的空闲数字(“john-doe- n ”)

目前我的永久链接是按通常的方式生成的:

before_validation :generate_slug  
private
def generate_slug   
  self.permalink = self.name.parameterize
end

如何实现类似validates_uniqueness_of的方法,将这种数字添加到self.permalink然后正常保存用户?

4

1 回答 1

3

首先,问问自己:有没有更简单的方法来做到这一点?我相信有。如果你已经愿意给你的 slug 添加数字,那么总是添加一个数字,比如 ID 怎么样?

before_validation :generate_slug

private
def generate_slug
  self.permalink = "#{self.id}-#{self.name.parameterize}"
end

这是一种非常健壮的方法,您甚至可以将 slug 直接传递给find方法,这意味着您根本不需要保存 slug。

否则,您可以只检查名称 + 号码是否已经存在,并将 n 加 1,然后重新检查,直到找到一个空闲号码。请注意,如果有很多同名记录,这可能需要一段时间。如果同时生成两个 slug,这种方式也会受到竞争条件的影响。

于 2011-07-10T16:29:43.390 回答