2013-08-06 4 views
0

API의 출력을 반환하는 사용자 정의 클래스를 제공하는 Ruby/Rails에 다른 사람의 라이브러리를 통합하려고합니다. 나는 (사용자가 제출 한 텍스트 게시물에 소위 "내용"이 전화를 내 응용 프로그램에서배열을 테이블로 구문 분석 - 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"}> 

:이 클래스 및 사용자 정의 방법은 레일 콘솔에 제출 될 때 함께 제공되는 코드와 출력의 예입니다) & "posts"테이블의 해당 게시물과 연결된 열에 출력을 넣으십시오. 지금이 내 게시물 컨트롤러에서 "작성"조치 내에서 수행되고있다 :

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

어떤 게시물 우측 출력, 그러나 그것의 형식이 엉망입니다!

--- 루비/대상 :에서는 CustomClass :: MyMethod otherinfo : {} moreinfo : {} info :? 루비/문자열 : REXMLUtiliyNodeString str : 출력 1 속성 : {} :! 루비/문자열 : REXMLUtiliyNodeString str : '1'속성 : {}? 루비/문자열 : REXMLUtiliyNodeString str : output2 속성 : {} :! 루비/문자열 : REXMLUtiliyNodeString str : '} {0}

출력을 정리하고 쓰기 쉬운 방법이 있습니까? 각 조각을 내 게시물 테이블의 다른 열에 넣거나 배열 개체 (@otherinfo/otherinfo : {}) 중 하나를 잡고 게시물 테이블에 쓸 수 있습니까?

저는 Ruby/Rails에 새로 입문했습니다. 양해 해 주셔서 감사합니다. 나는 이것이 단순한 무엇인가라고 확신한다. 그러나 나는 내가 필요로했던 곳에서 나를 붙 잡았던 오늘 무엇이라도 발견 할 수 없었다. 필자는 텍스트 문자열의 구문 분석이나 변환을 수행하는 올바른 명령을 배우는 방법을 이해하는 데 도움이되는 링크를 고맙게 생각합니다.

감사합니다.

+0

출력을 생성 한 입력은 무엇입니까? – Fred

+0

죄송합니다 - 출력 문자열을 제대로 들여 쓰지 않아 일부가 잘려서 ... 이제 전체 출력을 표시하도록 디스플레이 서식이 고정되었습니다. – SOConnell

+0

수신중인 출력이 YAML이지만 형식이 잘못되었습니다. 최선의 방법은 왜 형식이 잘못 되었는가를 알아 내고 YAML 인터프리터를 사용하여 구문 분석하여 다시 Ruby 객체로 변환하는 것입니다.즉, 일부 필드가있는 MyMethod라는 사용자 지정 클래스를 만듭니다. –

답변

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

첫 번째 작업.

0

지저분한 답변은 해시와 비슷합니다. 루비/문자열 : REXMLUtiliyNodeString str : '}'속성을 줄이려면 정규 표현식을 사용합니다. 이 같은

뭔가 :

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

이 함께, 위의 문자열, 물음표 모두를 대체 할 '{출력 1 :'1 '} "다음

당신은 전체 문자열을 평가 후면 단지 수 해시 표현식.

약간 부서지기는하지만 문제가 될 수 있습니다. 나는 텍스트 만 걸리는 테이블에 직접 루비 객체를 작성하려고이되도록 새로운 오전

:

+0

출력이 YAML이며 형식이 잘못되었으므로 YAML 인터프리터에서 파싱해야합니다. 그것은 커스텀 클래스를 생성합니다. –

+0

나는이 대답으로 일하고있다. (당장 YAML 통역사가 내 능력보다 뛰어나다.) 내 컨트롤러에 개인 함수로 정규 표현식을 넣은 다음 clean (@ post.output)을 호출하지만 다음 오류가 발생합니다 : 정의되지 않은 지역 변수 또는 메서드 'str'for # --- do 깨끗한 방법으로 뭔가를 바꿀 필요가 있습니까? – SOConnell