2012-09-10 2 views
2

내가 그 객체의 모든 필드에서 잘못된 문자/HTML을 검사 할 수 있도록 객체를 문자열로 변환해야하는 상황에 처해 있습니다.클래스 객체를 Ruby의 문자열로 변환

여기에 스팸 내 기능이 방법은 문자열을 사용하고 잘못된 데이터를 찾아하지만 난 문자열로 개체를 변환하는 방법을 알고,이 메소드에 전달하지

def seems_spam?(str) 
    flag = str.match(/<.*>/m) || str.match(/http/) || str.match(/href=/) 
    Rails.logger.info "** was spam #{flag}" 
    flag 
end 

을 확인합니다. 그래서 당신은 각각의 유효성을 검사하려고 :이

@request = Request 
spam = seems_spam?(@request.to_s) 

당신은

편집 공개적으로 액세스 할 수있는 필드가 표시됩니다

@request.inspect이 시도 할 수

감사

답변

5

을 안내하시기 바랍니다 시도 개체에 필드?

그렇다면 필드 및 값 쌍의 해시를 가져와 각각을 메서드에 전달할 수 있습니다.

@request.instance_values.each do |field, val| 
    if seems_spam? val 
    # handle spam 
end 

to_s 메소드 구현에 대해 묻는다면, Eugene이 대답했습니다.

+0

@ request.inspect, this { "first_name"=> "Anil", "last_name"=> "Dutt", "phone_number"=> "123456^%%^# GFDF" , "메모"=> "테스트 ... 67 $^* % $ *^$^% $^% RFHG DCSDHF $ \ # @ $ \ # $$ @} –

+0

예 그것은 .. 축하합니다 .... –

0

Object 클래스 내에 "to_s"메서드를 만들어야합니다.이 메서드에서는 개체의 모든 필드를 순환하여 한 문자열로 수집합니다.

그것과 같을 것이다 :

def to_s 
    attributes.each_with_object("") do |attribute, result| 
    result << "#{attribute[1].to_s} " 
    end 
end 

를 가변 특성하는 필드 이름 필드의 값을 갖는 배열 - [자료 1]

@object.to_s을 호출하는 문자열로됩니다 "100 555-2342 machete "처럼 스팸을 확인할 수 있습니다.

+0

결과 << "# {attribute [1] .to_s}", 여기에 1, 색인이 있습니까? 아니면 각 속성의 이름을 부여해야합니까? –

+0

1은 색인입니다. 각 속성의 이름을 지정해야합니다. 속성 [1]을 호출하면 속성의 값을 얻을 수 있습니다. –

+0

하지만 데이터를 확인하기 위해 모든 속성을 반복해야합니다. –

관련 문제