私のレール4のアプリケーションが虚栄心のURLを持つためには、多形スラッグテーブル(id、url)があります。テーブルフィールドの値の一意性をチェックする方法とuniqをuniqにする方法
class Article < ActiveRecord::Base
has_many :slugs, as: :sluggable, dependent: :destroy
after_save :create_slug
def create_slug
return if !url_changed? || url == slugs.last.try(:url)
#re-use old slugs
previous = slugs.where('lower(url) = ?', url.downcase)
previous.delete_all
slugs.create!(url: url)
end
end
@のarticle.urlが現在コントローラに設定されている:私はスラグを作成するには、次のしている私の記事のモデルに続いて
@article.url = @article.title.parameterize
がない限りこれは本当によく働きますこれは、タイトルが既に使用されているアーティクルが作成されていることを意味します。その場合はレールエラーPG::UniqueViolation: ERROR: duplicate key value violates unique constraint
私はが最初に値が存在するかどうかを確認する必要があると思っていますが、値が存在する場合は-1または-2などを追加してください。 urlが一意になるまでurlの終わりまで。これは正しいと思いますか?このシナリオを処理/コードする最良の方法は何ですか?
おかげ
興味深い。私はその宝石を使用していません。それは本当にすべてのものですか? – AnApprentice
ねえ、あなたがそれを使用していないなら、私はそれに移動することを提案します。それはあなたのために多くの時間を節約します。 –