友好ID 4使用范围模块

时间:2014-06-13 11:21:31

标签: ruby-on-rails ruby-on-rails-3 friendly-id

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

我有两个型号

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

根据文档,这应该有效。但是当我创建一个页面时,它不会通过作用域创建一个slug,这意味着当我创建另一个具有相同名称的页面时,我会得到重复的索引错误。

1 个答案:

答案 0 :(得分:4)

如果您正在使用类似这样的内容在slug字段中索引页面:

add_index :page, :slug, :unique => true

然后你可能想把它换成slug和region的索引:

remove_index :page, :slug
add_index :page, [:slug, :region_id], :unique => true

该文档介绍了如何在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