2

を取った場合、既にジョン-DOE-1がある場合、私は、ジョン・ドウにパーマリンクジョン-DOE-2をさせていただきたいと思い、パーマリンクする番号を追加します。レール:パーマリンクはすでに

を実装する方法
before_validation :generate_slug 
private 
def generate_slug 
    self.permalink = self.name.parameterize 
end 

: 数は、現在、私のパーマリンクは、通常の方法で生成され(「doe-ジョン・N」)

を追加する次の空き1でなければなりませんこの種の番号をself.permalinkに追加してから、ユーザーを通常どおりに保存するのような方法です。

答えて

3

まず、自分自身に質問してください:これを行う簡単な方法はありますか?私はそこにいると信じています。あなたが既にあなたのスラッグに番号を追加したいのであれば、いつもIDのような番号を付け加えるのはどうですか?

before_validation :generate_slug 

private 
def generate_slug 
    self.permalink = "#{self.id}-#{self.name.parameterize}" 
end 

これはそれを行うのは非常に堅牢な方法で、あなたも、あなたが本当にすべてでスラグを保存する必要がないことを意味find方法に直接スラグを渡すことができます。

それ以外の場合は、名前+番号がすでに存在するかどうかを確認し、nを1増やしてから、空き番号が見つかるまで再確認してください。同じ名前のレコードが多い場合は、時間がかかることに注意してください。同時に2つのスラグが生成されている場合、この方法は競合条件の影響を受けます。

+0

ありがとうdvyjones、このユーザー中心の虚栄心のケースでは、プロフィールpermalinkが作成日に関連付けられていることは残念なことです:** user/4208-john-doe **は明らかに**よりサイトの方が新しくなりますユーザー/ 1-john-doe **。 私はあなたの2番目のソリューションを選択します。コードについてはどうしたらいいですか? – David

+1

まあ、john-doe-1もjohn-doe-2より新しいでしょう。しかし、あなたの質問に答えるために、私はこれが動作すると信じています:https://gist.github.com/456d87a12bdd6aa30779。私はそれをテストしていない。 – henrikhodne

+0

ありがとう、見てみましょう! – David

関連する問題