タイトルフィールドに基づいてスラッグを作成したいので、それらのスラグは一意でなければなりません。一意性を検証して一意の代替案を提示する方法
validates_uniqueness_ofが失敗したときのためのコールバックメソッドはありますか?私はそれをユニークにするためにスラッグの最後に文字を追加できますか?
タイトルフィールドに基づいてスラッグを作成したいので、それらのスラグは一意でなければなりません。一意性を検証して一意の代替案を提示する方法
validates_uniqueness_ofが失敗したときのためのコールバックメソッドはありますか?私はそれをユニークにするためにスラッグの最後に文字を追加できますか?
このようなサウンドは、検証よりもbefore_createコールバックとして優れています。もしその名前が嘘であれば、実際には無効ではありません。それを一意にする必要があります。
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」を追加してください。
1を置くのではなく、重複したユーザーの数をチェックして、1を追加することができます。そのため、追加された数字を無視してユーザー名の正規表現を追加します。それはスラッグのためでもあったので、それはタイトルに基づいているので、スラグはそのインスタンスに付加された数字を持つことになるので、同じタイトルの投稿を数えることができると思います。 –
同じタイトル=同じスラッグであると仮定すると、タイトルの数を数えなければならず、カウントが0より大きい場合、カウント+1を加算します。 –
したがって、スラッグが存在するかどうかを確認してから、そのbefore_createメソッドのparam? –