0

我正在将其他人的库集成到 Ruby/Rails 中,该库提供了从 API 返回输出的自定义类。这是在 Rails 控制台中提交类和自定义方法时出现的代码和输出示例:

CustomClass.mymethod 'this is a normal string of text that i am submitting to the rails console.'

=> #<CustomClass::MyMethod:0x10159d4e8 @info={"output1"=>"15", "output2"=>"1"}, @otherinfo={0}, @moreinfo={0}, @stillmore={"violations"=>"0"}>

在我的应用程序中,我在用户提交的文本帖子(称为“内容”)上调用它并将输出放入“帖子”表中与该帖子关联的列中。现在这是在我的帖子控制器中的“创建”操作中完成的:

@post.output = CustomClass.mymethod(@post.content)

哪个发布了正确的输出,但它的格式是一团糟:

--- !ruby/object:CustomClass::MyMethod otherinfo: {} moreinfo: {} info: ? !ruby/string:REXMLUtiliyNodeString str: output1 属性: {} : !ruby/string:REXMLUtiliyNodeString str: '1' 属性: {} ? !ruby/string:REXMLUtiliyNodeString str: output2 属性:{} : !ruby/string:REXMLUtiliyNodeString str: '15' 属性:{} 还有:{0}

有没有一种简单的方法来清理输出并将每个部分写入我的帖子表的不同列,或者我可以只抓取一个数组对象(@otherinfo / otherinfo:{})并将其写入帖子表吗?

我对 Ruby/Rails 还很陌生,所以感谢您的耐心和帮助!我确信这很简单,但我今天找不到任何可以让我到达我需要的地方。我什至会很感激能帮助我了解如何学习正确的命令来解析或转换文本字符串的链接。

谢谢!

4

2 回答 2

0

凌乱的答案看起来几乎像一个哈希。我会使用正则表达式来减少每个 "? !ruby/string:REXMLUtiliyNodeString str: output1 attributes: {} : !ruby/string:REXMLUtiliyNodeString str: '1' attributes: {} ?"

像这样的东西:

def clean(string)
  str.gsub(/\?.*?REXML.*?\?/){|data|m=/.*odeString str: (\S*).*odeString str: ('.*?').*/.match(data); "{ #{m[1]}: #{m[2]} }"}
end

这将用 "{ output1: '1' }" 替换上面的子字符串、问号和所有内容

然后您可以将整个字符串评估为哈希表达式。

这有点脆弱,但可能对你有用。

于 2013-08-06T04:12:34.727 回答
0

这是我自己的问题的答案:

我太新了,以至于我试图将一个 ruby​​ 对象直接写入表中,该表只需要文本。我环顾四周,发现如何从哈希中提取字段,所以现在我只需在我的后控制器的创建操作中执行此操作:

file = Yomu.new params[:post][:file]
@post.output = file.text
info = Customclass.stats(@post.output)
@post.field1= info.method1['count']
@post.field2= info.method2['count']
@post.field3 = info.method3['count']

无论如何,教训是,确保你首先知道你在做什么。

于 2013-08-22T17:39:36.017 回答