ruby-on-rails - FriendlyId 不添加序列并抛出 ActiveRecord::RecordNotUnique

标签 ruby-on-rails activerecord rails-activerecord friendly-id

上下文非常简单,我有一个从FriendlyId扩展的类(class)模型,如下所示:

extend FriendlyId
friendly_id :friendly_name, use: [:slugged, :history]

def friendly_name
  slugs = [self.type_name, self.name]
  slugs << self.city.name      if self.city
  slugs << self.structure.name if self.structure
  return slugs
end

如果我创建具有相同类型、名称、城市和结构的类(class),则会收到以下错误:

 !! #<ActiveRecord::RecordNotUnique: PG::Error: ERROR:  duplicate key value 
 violates unique constraint "index_courses_on_slug"
 DETAIL:  Key (slug)=(cours-sevillanas-copie-paris-12-la-trianera) already exists.

我不明白为什么FriendlyId不在slug的末尾添加序列号... 欢迎任何建议。

我尝试在Friendly_name方法中返回字符串而不是数组,但错误仍然存​​在。

编辑

删除 :history 可以解决问题。

我还尝试了FriendlyId的其他分支(4.0-stable、4.1.x),但它没有解决问题。

最佳答案

我在 :history 功能上遇到了同样的问题:这是因为FriendlyId将使用单独的表来存储slugs,并且不会检查现有的slug列。

您可以创建迁移并重新保存整个表,以在新的 slugs 表中生成缺失的 slugs。

例如:

def up
  MyModel.all.map(&:save)
end

关于ruby-on-rails - FriendlyId 不添加序列并抛出 ActiveRecord::RecordNotUnique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091148/

相关文章:

ruby-on-rails - 如何将 2 个 Rails 模型混合到一个查找中?

ruby-on-rails - 在 rails 中将列类型更改为更长的字符串

ruby-on-rails - Rails 是否允许对 validates_related 进行条件验证?

css - Bootstrap 下拉菜单项在某些页面上不可点击

ruby-on-rails - Unicorn optimize with unicorn killer 性能最差

ruby-on-rails - 未初始化常量 MiniTest::测试错误

ruby-on-rails - Rails default_scope 阻止我的 Rails 应用程序启动

ruby-on-rails - 外键 (class_id) 未填充在 belongs_to 关联中

ruby-on-rails - .exists 之间的性能差异?和.where.present?

javascript - 使用 ERB 在 Javascript 中设置 CSS backgroundImage 路径