2011-07-10 2 views
0

タイトルフィールドに基づいてスラッグを作成したいので、それらのスラグは一意でなければなりません。一意性を検証して一意の代替案を提示する方法

validates_uniqueness_ofが失敗したときのためのコールバックメソッドはありますか?私はそれをユニークにするためにスラッグの最後に文字を追加できますか?

答えて

1

このようなサウンドは、検証よりもbefore_createコールバックとして優れています。もしその名前が嘘であれば、実際には無効ではありません。それを一意にする必要があります。

+0

したがって、スラッグが存在するかどうかを確認してから、そのbefore_createメソッドのparam? –

1

validates_uniqueness_ofを使用する必要はなく、いつでも自分で作成してメッセージをカスタマイズできます。例:

validate :field_uniqueness 

private 
def field_uniqueness 
    if self.exists?(:conditions => {:username => self.username}) 
     errors.add(:username, :name_taken, :username => "#{self.username}1") 
    end 
end 

ユーザー名が既に使用されている場合は、ユーザー名の末尾に「1」を追加してください。

+0

1を置くのではなく、重複したユーザーの数をチェックして、1を追加することができます。そのため、追加された数字を無視してユーザー名の正規表現を追加します。それはスラッグのためでもあったので、それはタイトルに基づいているので、スラグはそのインスタンスに付加された数字を持つことになるので、同じタイトルの投稿を数えることができると思います。 –

+0

同じタイトル=同じスラッグであると仮定すると、タイトルの数を数えなければならず、カウントが0より大きい場合、カウント+1を加算します。 –

関連する問題