友好 ID 4 使用作用域模块

j-d*_*exx 3 ruby-on-rails friendly-id ruby-on-rails-3

我无法解决这个问题。使用文档

我有两个模型

class Region < ActiveRecord::Base
  extend FriendlyId
  has_many :pages
  friendly_id :name, :use => :slugged
end

class Page < ActiveRecord::Base

  extend FriendlyId      
  belongs_to :region
  friendly_id :name, :use => :scoped, :scope => :region
end
Run Code Online (Sandbox Code Playgroud)

根据文档,这应该可以工作。但是,当我创建一个页面时,它不会通过范围创建一个 slug,这意味着当我创建另一个同名页面时,我会收到重复索引错误。

lim*_*ime 6

如果您当前正在使用以下内容在 slug 字段上索引您的页面:

add_index :page, :slug, :unique => true
Run Code Online (Sandbox Code Playgroud)

那么你可能想把它换成 slug 和区域的索引:

remove_index :page, :slug
add_index :page, [:slug, :region_id], :unique => true
Run Code Online (Sandbox Code Playgroud)

该文档描述了如何在 FriendlyId 5 中开始使用:history:scoped一起使用,也许这可以为您提供一些关于如何在您的情况下解决它的想法:http : //rubydoc.info/github/norman/friendly_id/master/file/README.md #Upgrading_from_FriendlyId_4_0


或者,您可以删除唯一性约束,因为我现在看到您已经回复了我的原始评论。:)

remove_index :page, :slug
add_index :page, :slug # no :unique here
Run Code Online (Sandbox Code Playgroud)