2012-01-10 23 views
2

私のレールアプリで私のルートにfriendly_idを使用しています。文字列に数字だけが含まれているかどうかを確認

ページに数値IDでアクセスできないようにしたいと考えています。

ページは、このようなアクセス可能である -

www.myurl.com/myfriendlyidstubページは次のようにアクセスすべきではない - www.myurl.com/12345(12345はmyfriendlyidstubのIDである)

friendly_idのドキュメントでこれを行う方法がわかりません。

だから私は、paramは二つの質問

def edit 
    if params[:id].is_numeric? #I need to know how to write this method 
     not_found #not_found redirects to a 404 
    end 
    #rest of the edit action 
end 

数値であるかどうかを確認するために私のコントローラ内のメソッドを追加することを検討しています - 私は「IS_NUMERIC」メソッドを書くにはどうすればよい

これは良い方法ですか?どんな落とし穴も見えますか?

+1

[このリンク](http://railsforum.com/viewtopic.php?id=19081)を参照してください。私はあなたが好きであれば、自分自身でルートの正規表現をすることができると思うが、そのようなアプローチでは問題は見られない。 – aishwarya

+0

もう1つ注意してほしいのは、ホワイトリスト化はブラックリスト化よりも優れたアプローチです(無効な入力を指定するのではなく、有効な入力を指定する) –

答えて

4

私はすべての方法でそれを貼る前にbefore_filterを使用したいと思います。

ルーティングsegment constraintを設定することもできます。

0

あなただけの右ルートの後にパーマリンクなどのユーザー名を持つようにしたいようですが、それは正しく、それが名前として表示される必要がありますが、セットアップフレンドリーあれば、私は信じている...「/」その後

config/route.rb 
... 
match '/:id' => 'controller#show' 
... 

を鳴らしidの代わりに

btw friendly_idを検索してくれてありがとう、私は自分のプロジェクトのようなものを探し始めようとしていました。

それが役立つかどうか教えてください。

+0

これは私が元々設定した方法ですが、私の問題は実際のIDを隠すことでした。私は受け入れられた答えに従ってこれを行った。 Friendly_idはうまく動作します。 git hub上のrepoの所有者も非常に役に立ちます。 – Finnnn

関連する問題