0

クラスLinksがあります。クラスにはこれらの属性があります

  1. ツイッター
  2. フェイスブック
  3. ピンタレスト
  4. クオラ

ユーザーがリンクをテキスト ボックスに挿入したときに、リンクが http または https で始まることを確認する検証を作成したいと考えています。

検証は機能しますが、ユーザーがリンクをまったく挿入しないと問題が発生します。空の属性で検証を実行しようとし、エラーが発生します。以下のコードは、空の属性をチェックしようとする私の試みです。

これが私の検証です:

     class Links <  ActiveRecord::Base
     attr_accessible :facebook, :twitter, :quora, :pinterest

     validate :formatted_link

     def formatted_link
      links = %w(facebook twitter pinterest quora)
       if links.any? {|link| self[link].nil?}
         #Don't want it to do any validation if column is nil. 
         #Would like to drop column if user doesn't add a link.
       else
          validates_format_of links, :with => URI::regexp(%w(http https))
          errors.add(:base, "Your link must start with http or https.")
       end
    end

理由:

ユーザーが「www.twitter.com/username」を送信するだけで、URL が私のサイトの URL「mydomain.com/page/www.twitter.com/username」に追加されます。なぜこれが起こっているのかわかりません。これを防ぐためにできること、または私が見逃していることを教えてください。

ありがとう。

4

2 に答える 2

1

linksに渡す前にシンボルに変換する必要があると思いますがvalidates_format_of、機能しているように見えるので、間違っているか、上記のサンプルコードにその詳細が欠けている可能性があります。

どちらの方法でも、次のようにして空白の検証をスキップできます。

validates_format_of :foo, with: some_format, allow_blank: true
于 2013-04-25T00:05:41.123 に答える