Ruby on rails 如何检查表字段值的唯一性,如果不是uniq,则将其设置为uniq
为了使我的Rails 4应用程序具有虚荣url,我有一个多态Slug表(id,url)。然后在我的文章模型中,我有以下内容来创建slug:Ruby on rails 如何检查表字段值的唯一性,如果不是uniq,则将其设置为uniq,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,为了使我的Rails 4应用程序具有虚荣url,我有一个多态Slug表(id,url)。然后在我的文章模型中,我有以下内容来创建slug: class Article < ActiveRecord::Base has_many :slugs, as: :sluggable, dependent: :destroy after_save :create_slug def create_slug return if !url_changed? || url == sl
class Article < ActiveRecord::Base
has_many :slugs, as: :sluggable, dependent: :destroy
after_save :create_slug
def create_slug
return if !url_changed? || url == slugs.last.try(:url)
#re-use old slugs
previous = slugs.where('lower(url) = ?', url.downcase)
previous.delete_all
slugs.create!(url: url)
end
end
除非存在冲突,否则这种方法非常有效,这意味着一篇文章的标题已经在使用中。在这种情况下,Rails错误与:
PG::UniqueViolation:错误:重复键值违反唯一约束
我想我需要
create\u slug
首先检查该值是否存在,如果不存在,则创建slug。但是,如果该值确实存在,则附加-1或-2等。。。直到URL唯一为止。这听起来对吗?对于这种情况,处理/编写代码的最佳方式是什么?旧行为是在特殊环境中实现的。但目前还没有发布。因此,如果您想恢复旧的行为,您可以在Github上的GEM文件中切换friebdly\u id
,并将按顺序插入的
添加到模块列表中
如果你不想移动任何宝石,那么,对你来说最简单的一件事就是使用下面的代码使URL更好
def to_param
"#{id}-#{slug}"
end
您可以随时更新方法代码并创建URL。有趣。我没有用那颗宝石。这真的很有必要吗?嘿,如果你不使用它,我建议你搬进去。这会为你节省很多时间。
def to_param
"#{id}-#{slug}"
end