Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何检查表字段值的唯一性,如果不是uniq,则将其设置为uniq_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何检查表字段值的唯一性,如果不是uniq,则将其设置为uniq

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

为了使我的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 == 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