2014-11-20 4 views
0

DB 레코드에서 특정 단어를 추출하는 방법을 알아 내려고 노력하고 있습니다. 지금까지 다음을 시도해 보았습니다. 내가 컨트롤러 또는 다른 기호 (# 또는 %)에 @로 시작 아무것도 잡고 다른 값으로 저장하기 위해 노력하고있어레일에있는 컨트롤러에서 특정 텍스트를 열로 추출하는 방법

test = Message.where(:msg_id => params[:id]) 
test.content 
=> "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin at diam sapien. Nullam aliquet risus ac ex luctus, eu faucibus leo sodales. Cras tempus volutpat purus at dignissim. Nullam eu tortor in felis pretium venenatis et at sem. Proin malesuada pellentesque massa quis efficitur. Sed a pharetra sem. @John" 

후 난. 나는 시도했다

content = test.content.pluck.start_with? '@' 
Message.user = content 
Message.save 

그런 것 같지만 작동하지 않았다. 즉, 내 test.content 큰 메시지를 가지고 끝에 또는 시작 부분에 (선호하는 시작) 하나는 @ john 또는 # john 넣어 다음 메시지가 .. 그렇게;

#John Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin at diam sapien. Nullam aliquet risus ac ex luctus, eu faucibus leo sodales. Cras tempus volutpat purus at dignissim. Nullam eu tortor in felis pretium venenatis et at sem. Proin malesuada pellentesque massa quis efficitur. Sed a pharetra sem. 

그럼 내 컨트롤러는 test.content에서 #John 또는 #john 또는 무엇이든을 추출하고 이것에 대해 이동하는 방법을 test.username

제안에 따라 넣어 것? 메시지가 여기 은 아마 당신이 정규식, 또는 단순히 text.split을 사용할 수 있습니다

가 사용자 이름을 추출하려면 주위 @message 또는 무언가를 사용해야합니다 클래스 이름이기 때문에

답변

1
Message.user = content 

이 모든 우선, 작동하지 않습니다 ('') .select {| word | 단어 [0] == '@'}

+0

'split' 물건이 나를 위해 작동하지만'test.username'에서 쓰레기가 많이 나옵니다.''--- \ n- Lorem \ n "' 매우 깨끗한'Lorem' ... 여분의 문자는 필요하지 않습니다. 암시? – user2419316

+0

nevermind, 도와 줘서 고마워. :) 그냥 그 줄에'.first'을 추가하면 물건을 정리했다. – user2419316

0

왜 정규 표현식을 사용하지 않습니까? 첫 번째 내용에서 이름 존을 얻기를위한 예를 들면 :

/@(\w*)/.match(test.conent)[1] # outputs John 

자신의 정규 표현식을 만드는 데 사용 http://rubular.com/.

관련 문제