8

我处于需要将对象转换为字符串的情况,以便我可以检查该对象的任何字段中的无效字符/HTML。

这是我的垃圾邮件检查功能

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)

请指导

谢谢

4

2 回答 2

8

你可以试试@request.inspect

这将显示可公开访问的字段

编辑:那么您是否尝试验证对象上的每个字段?

如果是这样,您可以获得字段和值对的散列,并将每一个传递给您的方法。

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

如果你问的是实现 to_s 方法,Eugene 已经回答了。

于 2012-09-10T07:53:19.520 回答
1

您需要在 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 ",您可以使用该字符串检查垃圾邮件。

于 2012-09-10T08:03:09.667 回答