Как использовать Friendly_Id с STI? - PullRequest
1 голос
/ 30 сентября 2011

Я довольно озадачен тем, как настроить гем friendly_id (4.0.0.beta12) для правильной работы с моделями 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

Проблема заключается в том, что select_file_id выбирает slug w / type, установленный на 'Ford', и выходит чистым (поскольку slug 'test' уже принадлежит записи для типа 'Toyota'). Предполагая, что слаг с именем «test» не существует, он пытается сохранить запись с помощью «test», и все идет к черту.

Есть идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 октября 2011

Этот пост объясняет, как это сделать: http://ruby.zigzo.com/2011/10/08/how-to-use-the-friendly_id-gem-w-sti-models/

0 голосов
/ 07 октября 2011

Может быть, вы могли бы добавить метку времени к идентификатору, это остановит конфликты.Хотя это не идеальное решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...