【问题标题】:Friendly ID 4 Using scoped module友好 ID 4 使用作用域模块
【发布时间】:2014-06-13 11:21:31
【问题描述】:

我无法解决这个问题。使用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,这意味着当我创建另一个具有相同名称的页面时,我会遇到重复索引错误。

【问题讨论】:

  • 我猜你必须更改数据库索引(虽然不完全确定)。您在设置 FriendlyId 时添加了哪些索引?
  • 啊哈,我有一个唯一索引。我认为friendly_id出于某种原因添加了与范围模型相关的内容,但它似乎只是检查是否有另一个页面具有属于该区域的相同slug。非常感谢。您想将更新索引作为答案,以便我将其标记为正确吗?
  • 很高兴它有帮助。 :) 我已经回答了不同的建议,但我将两者都留给未来的读者。

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


【解决方案1】:

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

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

那么您可能希望将其交换为 slug 和区域上的索引:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2011-07-02
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多