2012-05-20 3 views
0

User 모델의 phone 입력란에 국내 전화 번호를 저장하려고합니다.Rails에서 object.attribute를 호출하는 메소드를 만드는 방법은 무엇입니까?

번호를 국제 번호로 변환하는 빠른 방법을 사용했습니다.

내 질문이 작업을 수행하는 방법에 내 현재

to_international(@user.phone.to_international,@user.phone.country) 

어떤 생각보다는이

@user.phone.to_international 

처럼이 방법을 사용할 수 있도록하는 방법은?

+1

전화 번호가 무엇이든 클래스에 추가하십시오. –

+0

클래스는'User'입니다. 'phone' 속성에 응답하고'User' 모델링하지 않으려면 어떻게해야합니까? – Martin

+0

아니요, 사용자가 클래스 사용자입니다. 전화가 다른 수업이에요. –

답변

2

이 작동하지만, 확실하지가 after_initialize 더 나은 경우 또는

이 사용자 모델

after_find :prepare_phone 

private 
def prepare_phone 
    def phone.to_international 
    self.upcase # change with whatever you want. 'self' is the phone attr 
    end 
end 
+0

국제 형식으로 만 필요한 경우 더 좋을 수 있습니다. 원래 값에 대한 액세스가 필요한 경우가 아니라 –

+0

실제로이 방법으로 문제가 해결되지는 않습니다. 우리는 사용자가 무엇인지 알고 있어야합니다 –

+0

왜? 사용자가 합리적인 AR 모델이라고 가정 할 때 왜이 기능이 작동하지 않습니까? –

2

이 추가되지 않은 to_international 방법 전화라는 클래스를 만들고에 전화 속성을 설정 사용자 클래스는 전화 클래스의 인스턴스가됩니다.

+0

그건 또 다른 +1이 과도 할 수도 있습니다. –

0

몽키 패치 String 클래스. myapp/config/initializers/string_monkey_patches.rb에 다음을 추가하십시오 :

String.class_eval do 
    PHONE_NUMBER_FORMAT = // # some regex matching a phone number 
    def to_international 
    raise 'Invalid phone number format' unless self.match(PHONE_NUMBER_FORMAT) 
    # convert self (the phone number string) to an international number 
    end 
end 
관련 문제