我在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"}>
在我的应用程序中,我在用户提交的文本帖子(称为“内容”)&amp;将输出放入与“posts”表中该帖子关联的列中。现在,这是在我的帖子控制器中的“创建”操作中完成的:
@post.output = CustomClass.mymethod(@post.content)
哪个发布正确的输出,但它的格式是一团糟:
---!ruby / object:CustomClass :: MyMethod otherinfo:{} moreinfo:{} info :? !ruby / string:REXMLUtiliyNodeString str:output1 attributes:{}:!ruby / string:REXMLUtiliyNodeString str:'1'属性:{}? !ruby / string:REXMLUtiliyNodeString str:output2 attributes:{}:!ruby / string:REXMLUtiliyNodeString str:'15'属性:{}更多:{0}
是否有一种简单的方法可以清理输出并将每个部分写入我的posts表的不同列,或者我可以只抓取其中一个数组对象(@otherinfo / otherinfo:{})并将其写入帖子表
我是Ruby / Rails的新手,所以感谢您的耐心和帮助!我相信这很简单但我今天找不到任何能让我满足的地方。我甚至会感谢链接,这些链接将帮助我了解如何学习正确的命令来解析或转换文本字符串。
谢谢!
答案 0 :(得分: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'}”
替换上面的子字符串,问号和所有字符串然后你可以将整个字符串作为哈希表达式进行评估。
这有点脆弱,但可能适合你。
答案 1 :(得分: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']
无论如何,上课,确保你先知道你在做什么。