2

を使用しない、あなたはURLでルックアップ・ポスト私のコントローラ内の特定のポストをフェッチするために主キー

http://0.0.0.0:3000/post/1 
http://0.0.0.0:3000/post/2 
http://0.0.0.0:3000/post/3 

をこのような何かを入力することができ、それは、これを取り出すことができないように、私はそれを作るために求められていますランダムな文字列を使用します。もっとこのような例何かについて:

http://0.0.0.0:3000/post/wr4t-d2e2-1ee3 
http://0.0.0.0:3000/post/prst-3r4t-1r1r 
http://0.0.0.0:3000/post/asdo-2e12-sxas 

質問私は、ポスト・テーブル内の別の列を作成する必要があり、これを行うためには は、「トークン」または「ランダム」と呼ばれ、ポストをフェッチするためにfind_byを経由してその列を使用します?すなわち、Post.find_by_token( 'wr4t-d2e2-1ee3')

これに対処する正しい方法は何かに関する意見。 私はアプリが「代理キー」は、「自然キー」トークンランダム

「のGUIDを」を使用します例上に読んでいる私はほんの少し圧倒よベストプラクティスとは何か。

+0

何を使用するのがベストプラクティスであるかについて明確な答えはないと思います。個人的には、あなたが提供しているものに関連する何かを探します:UPC、Isbn、ブログ投稿のタイトルなどが重要です。重要なのはその列のインデックスになります。他の人たちはうまくいく。 – Ilion

+0

Lemmeはマルチテナントシステムを持っていて、ユーザーがIDで投稿する他のテナントを見たくないと言っています –

+0

ええ、クライアントはその投稿をアクセスしやすく予測したくありません。 (すなわち、1,2,3,4,5)を論理順に並べる。 – alenm

答えて

2

あなたが探していることはこれです:

class Post < ActiveRecord::Base 
    # Permalinks 
    #----------------------------------------------------------------------------- 
    def to_param 
     "#{post.token}" 
    end 
    end 

のURL

post_url(@post) 
#http://0.0.0.0:3000/post/wr4t-d2e2-1ee3 

として生成されます。そして、あなたは、通常のあたり

Post.find(params[:id]) 

として行うことができますあなたがして、トークンを生成することができます単にbefore_validationコールバックを使用します。

OR

あなたは宝石を移動して、あなたのためにこれを処理します friendly_id、だけでなく、生成されたナメクジのトラックの履歴を使用することができます。 Tho、それはおそらくあなたの要件のために不当だと思われる。

関連する問題