2011-09-30 2 views
1

friendly_id(4.0.0.beta12)の宝石をSTIモデルで正しく動作させるための設定方法については、かなり不便です。Friendly_Id w/STIの使い方は?

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

生じる誤差がある:問題はそのfriendly_idの選択ルックスです

(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 

私はこのような何かをしようとした場合

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

class Ford < Car 
end 

class Toyota < Car 
end 

:ここ

は、モデルのセットアップですslug w/typeが 'Ford'に設定され、きれいになる(スラッグ 'test'はすでにタイプ 'トヨタ')。 「テスト」という名前のスラッグがないと仮定すると、スラッグ「テスト」でレコードを保存しようとすると、すべてが地獄になります。

アイデア?

ありがとうございました!

+0

? –

+0

こんにちはナッシュ、私はfriendly_id(4.0.0.beta12)を使用しています(質問も更新)ありがとう。 –

+0

おそらく私のgemファイルに 'gem 'friendly_id'、 '〜> 4.0.0.beta8''が追加されるはずですが、4.0.0.beta12は' bundle install'を実行するときにインストールされるものです –

答えて

0

多分あなたはIDにタイムスタンプを追加することができます、それは競合を停止します。理想的な解決策ではありませんが。

+0

これは良いアイデアは、動作しますが、ええ、それは理想的ではありません。スラグを使用する理由は、通常、よりクリーンなURLのためであり、そのソートは目的を破る。あなたが興味を持っているなら、私は宝石の著者から提案された解決策と以下のリンクを掲示しました。 –