2011-01-21 2 views
0

내가 내 user.rb 모델에서 다음이 : 여러 가지 이유를 들어레일 - 컨트롤러에서 모델 검증에 호출하기위한 허용은

INVALID_EMAILS = %w(gmail.com hotmail.com) 
validates_format_of :email, :without => /#{INVALID_EMAILS.map{|a| Regexp.quote(a)}.join('|')}/, :message => "That email domain won't do.", :on => :create 

, 나는 확인하기 위해 내 컨트롤러에이 논리를 사용할 수 있도록하려면 위의 normall이 실행될 때 user.created가되기 전에 전자 메일의 입력.

어떻게하면 사용자가 아닌 다른 컨트롤러에서 호출 할 수있는 방법으로 바꿀 수 있습니까? 가능한?

그리고 false가 반환되면 오류를 발생시키고 싶습니다. 사용자가 이유를 알 수 있도록 추가 하시겠습니까?

감사합니다 시도

:

def validate_email_domain(emailAddy) 
    INVALID_EMAILS = %w(gmail.com googlemail.com yahoo.com ymail.com rocketmail.com hotmail.com facebook.com) 
    reg = Regexp.new '/#{INVALID_EMAILS.map{|a| Regexp.quote(a)}.join('|')}/' 
    self.errors.add('rox', 'Hey, Ruby rox. You have to say it !') unless reg.match attribute 
    end 

업데이트 : 그 만들 것 때문에

.. 
    Rails.logger.info validate_email_domain(email) 
... 

    def valid_email_domain(emailAddy) 
    reg = Regexp.new '/#{User::INVALID_EMAILS.map{|a| Regexp.quote(a)}.join("|")}/' 
    return true if emailAddy.scan(reg).size == 0 
    end 
+0

누구나 아이디어가 있습니까? – AnApprentice

답변

1

당신은 방법 내부 상수를 할당 할 수 없습니다 그것은 "동적 상수 할당" . 대신 모델 클래스에서이 상수를 정의한 다음 컨트롤러에서 참조하십시오. User::INVALID_EMAILS

+0

라이언, 고맙습니다. 내가 그것을 업데이트 : 보호 def validate_email_domain (emailAddy) reg = Regexp.new '/ # {User :: INVALID_EMAILS.map {| a | reg.match 속성이 인 경우 이 아닌 한 self.errors.add ('rox', 'Hey, stop!')하지만 이제 오류가 발생합니다. "NoMethodError ("/ \ # {User :: INVALID_EMAILS.map {| a | Regexp.quote (a)}. join (": String) :" – AnApprentice

+0

에 대한 정의되지 않은 메서드 "|"새 메서드 – AnApprentice

+0

으로 업데이트합니다. 다음과 같이하면 : def valid_email_domain (emailAddy) reg = Regexp.new '/ # {User | INVALID_EMAILS.map {| a | Regexp.quote (a)}. join ("|")} /' return emailAddy.scan (reg) .size == 0 end – AnApprentice

1

그래, 이해해.

당신은 다음과 같은 것을하고 싶지 :

u = User.new 
u.email = "[email protected]" 
if !u.valid? 
    puts u.errors.to_xml 
    //do something 
    return 
end 

당신이 이러한 오류와 함께 할, 당신이 그 다시보고 할 방법에 내려와 보통 난 그냥 플래시 [다시 XML로 그들을 쏠 것입니다 : 오류], 당신이 비계를하고 있다면 정상적인 기본 동작입니다. puts가 있으므로 오류에 액세스하는 방법을 볼 수 있습니다. 원칙적으로

추가

유효성 검사 논리를 중복되지 않도록하려고합니다. Rails는 동일한 작업을 수행하기 위해 여러 곳에서 다른 메소드를 만들지 않고도 유효성 검사에 필요한 모든 것을 제공합니다.

+0

감사하지만 다른 사용자 유효성 검사로 인해 문제가 발생할 수 있지만 제 경우에는 할 수 없습니다. 이메일을 유효하게하려고합니다. – AnApprentice

+0

이 방법을 사용했습니다. 내 사용자 모델에서 실패한 다양한 유효성 검증의 오류 해시가 있습니다. user.errors [: email]를 확인하십시오. – Fotios