2013-04-24 2 views
0

나는 클래스 링크가 있습니다. 이 클래스는 형식에 대한 사용자 지정 유효성 검사

가 나는 사용자가 시작 텍스트 상자에 링크를 삽입 할 때 확실하게 검증을 작성하려면 이러한 특성

  1. 에게 트위터
  2. 페이스 북
  3. 대표자 :
  4. Quora에있다 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의 GET이의 URL "mydomain.com/page/ 여기

    내 검증의 다른 뭔가가있는 경우 www.twitter.com/username. 이런 일이 왜 확실하지. 내가 알려 주시기 바랍니다 실종이 또는 무언가를 방지 할 수 있습니다.

    감사합니다.

답변

0

:

어느 쪽이든, 당신과 공백에 대한 유효성 검사를 건너 뛸 수 있습니다. 공백을 허용하려는 경우 다음과 같이 할 수 있습니다.

class Link < ActiveRecord::Base 
    Networks = [:facebook, :twitter, :quora, :pinterest] 
    attr_accessible *Networks 

    validates_format_of *Networks, :with => URI::regexp(%w(http https)), :allow_blank => true 
end 
+0

davogones에게 감사드립니다. allow_blank가 작동했습니다. 답변을 투표 할 수 없습니다. b/c 충분한 담당자 점수가 없습니다. – Zach

1

validates_format_of으로 전달하기 전에 기호로 변환해야한다고 생각합니다. 그러나 문제가 있거나 잘못된 것일 수 있습니다. 위의 샘플 코드에 해당 내용이 누락되었을 수 있습니다. 난 당신이 로터리 방식으로 conditional validation을하려는 생각

validates_format_of :foo, with: some_format, allow_blank: true 
+0

감사합니다. Jim. 함께 추가되었습니다 : allow_blank. – Zach

관련 문제