2012-09-10 30 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) 

請指導

感謝

回答

5

你可以嘗試@request.inspect

這將表明公衆開放

編輯字段:所以你想驗證每個對象上的字段?

如果是這樣,你可以得到一個字段和值對的散列並將每個對傳遞給你的方法。

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

如果您在詢問如何實施to_s方法,Eugene已經回答了它。

+0

@ request.inspect將hash數據返回爲to_s did,像這樣{「first_name」=>「Anil」,「last_name」=>「Dutt」,「phone_number」=>「123456^%% ^#GFDF」 , 「notes」=>「test ... 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 

屬性變量是與場的名稱和字段的值的陣列 - [ID,1]

調用@object.to_s將導致與串如"100 555-2342 machete ",您可以檢查垃圾郵件。

+0

結果<<「#{attribute [1] .to_s}」,這裏是什麼1,索引?還是我需要給每個屬性的名稱? –

+0

1是索引, t需要給每個屬性的名稱。調用屬性[1]會給你一個屬性的值。 –

+0

但我需要遍歷所有的屬性來檢查他們的數據.. –