1

サーバーを離れるすべてのID、つまりURLとHTML出力に表示されるIDを難読化しようとしています。

エンコードとデコードのメソッドを持つ単純なBase62ライブラリを作成しました。ActiveRecordのidメソッドを定義して、エンコードされたバージョンのidを返すように上書きし、コントローラーを調整して、デコードされたリソースをロードするとparams[:id]、目的の結果が得られます。IDはURLでbase62エンコードされ、応答には正しいリソースが表示されます。

has_many今、私は関係を通して定義されたサブリソースがロードされていないことに気づき始めました。Userたとえば、私はそれと呼ばれるレコードを持っていhas_many Postます。が付いた投稿がありますが、現在User.find(1).postsは空user_id = 1です。私の説明では、ActiveRecordは、と比較するのuser_idではなく、のメソッドと(私が上書きPostした)メソッドを比較する必要があります。つまり、基本的にこれは私のアプローチを役に立たなくします。 idUserself[:id]

私が欲しいのはobfuscates_id、モデルで定義するようなもので、残りは処理されます。つまり、適切な場所ですべてのエンコード/デコードを実行し、サーバーからIDが返されないようにします。

利用可能な宝石はありますか、または誰かがこれを達成するためのヒントを持っていますか?私はこれを最初に試したのではないに違いない。

4

1 に答える 1

3

あなたが説明していることは、URLスラッグの特殊なアプリケーションのように聞こえます。Acts_as_sluggableやfriendly_idのようなプラグインを見てください。また、Userモデルでto_paramメソッドをオーバーライドすることも検討してください。

たぶんここから始めましょう:レールに最​​適なパーマリンク

于 2010-05-11T22:33:57.343 に答える