2

文字列ベースの一意の識別子を保持する属性を持つモデルを作成したいと考えています。

一意の文字列の長さを 3 文字にし、アルファベット (小文字のみ) と数字で構成する必要があります。

上記のようなものを実装するにはどうすればよいですか?衝突を避けるにはどうすればよいですか?私はMD5を調べましたが、それは私が達成したいことのラインに沿っているようですが、より短いです。それがアプローチを決定論的にするなら、私はそれを時間でシードすることも喜んでします。

このトピックに関するフィードバックや指針をいただければ幸いです。ありがとう!

編集: 私の頭に浮かんだ解決策の1つは、すべての順列でいっぱいのテーブルを作成し、必要に応じてテーブルからランダムに選択し、使用したら削除することです。これは悪いアプローチですか?

4

3 に答える 3

1

このSO スレッドをチェックしてください。良い提案がたくさんあります。特に、この投稿を指すSimone Carlettiによる最後の回答。

上記の投稿にはかなりの数のオプションがあります。私が気に入っていて、あなたに役立つかもしれないのは、rufus-mnemo gemの使用です

于 2012-08-29T03:09:00.173 に答える
0

alphadecimal と呼ばれるこの gem が役立つかもしれません。

于 2012-08-29T06:27:20.003 に答える
0

そのため、いくつかの質問と回答を読んだ後、私が決定した解決策は、誰かが提案したものとはまったく異なります.

コードを格納するテーブルを作成しました。使用したい文字に基づいて、3 文字の組み合わせごとにこのテーブルを設定する Ruby スクリプトを作成しました。次に、私のモデルでは、コードがまだ割り当てられていない場合、コードをインスタンスに割り当てる before_save メソッドがあります。

このアプローチにより、before_save でコードを割り当てるときに競合が発生することがなくなります。一番遅いのはテーブルの生成ですが、これは1回で済むので対処できます。

于 2012-08-29T05:58:40.507 に答える