2013-08-06 36 views
0

我在Ruby/Rails中集成了其他人的庫,它提供了從API返回輸出的自定義類。這是上課的時候和自定義方法在軌控制檯提交自帶的代碼和輸出的例子:解析數組輸出到表 - Ruby 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) 

哪些職位的右輸出,但它的格式是一個爛攤子:

---紅寶石/對象:CustomClass :: MyMethod otherinfo:{} moreinfo:{} info:? !ruby/string:REXMLUtiliyNodeString str:output1 attributes:{}:!ruby/string:REXMLUtiliyNodeString str:'1'attributes:{}? !ruby/string:REXMLUtiliyNodeString str:output2 attributes:{}:!ruby/string:REXMLUtiliyNodeString str:'15'attributes:{} stillmore:{0}

是否有簡單的方法來清理輸出並寫入每篇文章到我的帖子表的不同列中,或者我可以只抓取其中一個數組對象(@otherinfo/otherinfo:{})並將其寫入posts表中?

我對Ruby/Rails很新,所以我感謝您的耐心和幫助!我確信這很簡單,但今天我找不到任何能讓我得到我需要的東西。我甚至會感謝鏈接,這些鏈接將幫助我理解如何學習正確的命令來解析或轉換文本字符串。

謝謝!

+0

輸入產生的輸出是什麼? – Fred

+0

對不起 - 我沒有正確縮進輸出字符串,所以有些被切斷......現在已經修復顯示格式以顯示整個輸出。 – SOConnell

+0

您收到的輸出是YAML,但格式不正確。最好的辦法是找出爲什麼它變得格格不入,然後使用YAML解釋器解析它以將其重新轉換爲Ruby對象。因爲它創建了一個名爲MyMethod的自定義類,並帶有一些字段。 –

回答

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'] 

總之,教訓是,要確保你知道你在做什麼與第一次合作。

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 

這將取代上述子,問號和所有與「{輸出1:‘1’}」

然後,你可以EVAL整個字符串一個哈希表達式。

這有點脆,但可能適合你。

+0

輸出是YAML,格式不正確,應該由YAML解釋器解析。它正在生成一個自定義類。 –

+0

我正在使用這個答案(現在YAML解釋器的東西超出我的能力)。我把正則表達式作爲一個私人函數在我的控制器,然後通過乾淨的(@ post.output)調用它,但得到以下錯誤:未定義的局部變量或方法'str'for# ---做我需要在乾淨的方法內改變一些東西,或者把它放在別的地方? – SOConnell