【问题标题】:How to use Friendly_Id w/ STI?如何使用带 STI 的 Friendly_Id?
【发布时间】:2011-09-30 19:01:41
【问题描述】:

我很困惑如何设置friendly_id (4.0.0.beta12) gem 以与 STI 模型正常工作。

这是模型设置:

class Car < ActiveRecord::Base
  extend FriendlyId
  friendly_id :name, :use => :slugged
end

class Ford < Car
end

class Toyota < Car
end

如果我尝试这样的事情:

Toyota.create!(name: "test")
Ford.create!(name: "test")

产生的错误是:

   (0.1ms)  BEGIN
  Ford Load (0.2ms)  SELECT `cars`.* FROM `cars` WHERE `cars`.`type` IN ('Ford') AND (`slug` = 'test' OR `slug` LIKE 'test--%') AND (id <> 7606) ORDER BY LENGTH(`slug`) DESC, `slug` DESC LIMIT 1
   (0.5ms)  UPDATE `cars` SET `slug` = 'test', `updated_at` = '2011-09-30 15:06:08' WHERE `cars`.`type` IN ('Ford') AND `cars`.`id` = 7606
   (0.1ms)  ROLLBACK
ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'test' for key 2: UPDATE `cars` SET `slug` = 'test', `updated_at` = '2011-09-30 15:06:08' WHERE `cars`.`type` IN ('Ford') AND `cars`.`id` = 7606

问题是friendly_id 的选择查找类型设置为“福特”的slug 并且干净(因为slug 'test' 已经属于类型'Toyota' 的记录)。假设不存在名称为 'test' 的 slug,然后它会尝试使用 slug 'test' 保存记录,然后一切都将陷入困境。

有什么想法吗?

谢谢!

【问题讨论】:

  • 您使用的是什么版本的friendly_id?
  • 嗨,纳什,我正在使用friendly_id (4.0.0.beta12)(也更新了问题)谢谢。
  • 我可能应该在我的gem文件中添加gem 'friendly_id', '~&gt; 4.0.0.beta8',但是当我运行bundle install时安装的是4.0.0.beta12

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


【解决方案1】:

也许您可以在 id 中添加时间戳,它会停止冲突。虽然这不是理想的解决方案。

【讨论】:

  • 这是一个好主意,并且会起作用,但是它并不理想。使用 slugs 的原因通常是为了更清晰的 URL,这有点违背了目的。如果您有兴趣,我在下面发布了一个链接,其中包含 gem 的作者提出的解决方案。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2019-11-12
    • 1970-01-01
    相关资源
    最近更新 更多