0

属性を持つモデルがありlinkます。link 属性は、外部 URL に設定することもhttp://google.com、内部ページを参照することもできます/users/1

フォームlinkには、検証のない単なるテキスト フィールドがあります。でレンダリングされlink_to "whatever", model.linkます。

Rails の URI 検証の例はたくさんあります。ただし、相対パスも考慮しているものはありません。link正規表現の使用を検討していましたが、外部 (http/https) と内部 (/users/1、/locations、/whatever/1/something/2) を処理できる属性を設定するより良い方法があるかどうかを知りたいと思っていました。) パス。

許可されるべきものの例

http://www.google.com
https://www.google.com
http://www.google.com?something=blah
http://www.google.com/thing/test/
/locations
/locations/1
/products/1/skus/4
"" (e.g. blank)

許してはいけない例

www.google.com
google.com
products/2
htt://

編集

これに対するより良い、完全に異なるアプローチがあれば、私はそれも受け入れます。

4

1 に答える 1

0

管理者のみがこのフィールドを使用するため、正しいプレフィックスが入力されていることを確認するための最小限の検証のみが必要でした (文字が誤って失われないようにするため)。

validates :link, :format => /(^$)|(^(http:\/\/|https:\/\/|\/))/ix 

誰かがより良い解決策を持っている場合、私はそれを変更することにオープンです。

于 2013-10-21T19:20:53.583 に答える