1

コールバックで投稿のスラッグを作成していafter_createますが、スラッグが既に存在する場合に番号を末尾に追加する方法がわかりません。

class Post < ActiveRecord::Base
  attr_accessible :body, :title, :slug
  after_create :create_slug
  validates_uniqueness_of :slug

  def create_slug
    existing = Post.where("slug LIKE ?", "#{title.parameterize}%").length
    existing > 0 ? slug = "#{title.parameterize}-#{existing+1}" : slug = title.parameterize
    self.update_attributes(slug: slug)
  end
end

whereたとえば、私の句が「Some title That is Different」というタイトルの投稿に一致するため、これは機能しません。

post.id1 つの解決策は、列挙しようとする代わりに追加することです。これは、投稿が削除された場合にも適している可能性があります。しかし、投稿を削除するつもりはありません。また、ID を使用しない方が意味があるようです。

何かアドバイス?

4

1 に答える 1