0

APIからの出力を返すカスタムクラスを提供するRuby/Railsに他の誰かのライブラリを統合しています。これは、クラスとカスタム メソッドが 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' 属性: {} stillmore: {0}

出力をクリーンアップして、各部分を posts テーブルの異なる列に書き込む簡単な方法はありますか? または、配列オブジェクト (@otherinfo / otherinfo: {}) の 1 つだけを取得して、posts テーブルに書き込むことはできますか?

私は Ruby/Rails を初めて使用するので、ご理解とご協力をお願いいたします。これは単純なことだと確信していますが、今日、私が必要とする場所にたどり着いたものは何も見つかりませんでした. テキスト文字列の解析または変換を行うための正しいコマンドを学ぶ方法を理解するのに役立つリンクもありがたく思います。

ありがとう!

4

2 に答える 2

0

これが私自身の質問に対する答えです:

私は非常に新しいので、テキストのみを受け取るルビーオブジェクトをテーブルに直接書き込もうとしていました。周りを見回して、ハッシュからフィールドを引き出す方法を見つけたので、ポストコントローラーの作成アクションでこれを行うだけです:

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 に答える
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 に答える