4

私は現在、モデルでacts_as_paranoidとfriendly_id(5.0.1)を使用しています。モデルを破棄して、同じスラッグを生成する新しいモデルを作成しようとすると、次のようになります。

ERROR:  duplicate key value violates unique constraint "index_papers_on_slug"

削除されていないオブジェクトだけでなく、すべてのオブジェクトのスコープ内でスラッグが既に存在するかどうかをチェックするコードを何らかの方法で取得する必要があります。

with_deletedスラッグが既に存在するかどうかを確認するときに使用する Friendly_id を取得するにはどうすればよいですか。スラッグ履歴も使用しているため、さらに複雑になる可能性があることに注意してください。

深く掘り下げると、履歴を使用しているため、オブジェクトがソフト削除されている間にスラッグが完全に削除されていることに気付きました。

DELETE FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."id" = $1  [["id", 9423]]

したがって、これを防ぐ方法を理解する必要があるだけunscopedです。有効なスラッグを見つけようとするときに、 Friendly_id コード自体が既に使用されているように見えるので、大丈夫です。

4

2 に答える 2

2

scopedFriendly_id には、スコープ内で一意のスラッグを生成できるというモジュールがあります。だから、おそらく

class Paper < ActiveRecord::Base
  extend FriendlyId
  friendly_id :title, :use => :scoped, :scope => :unscoped
end

問題を解決します。

于 2014-02-13T19:02:58.173 に答える
1

モデルに以下を追加すると、スラッグの依存破棄をオーバーライドできました

def has_many_dependent_for_slugs; end

解決策は、このgithub issueに関するコメントから得られます。

于 2014-02-13T20:51:12.370 に答える