2012-04-04 3 views
1

인스턴트 메신저를 사용하여 모든 멘션을 추출하는 응용 프로그램을 작성합니다. 나는 멘션을 보낸 모든 사용자를 저장하려는 프로필 모델을 가지고 있습니다. 그 테이블에 나는 트위터 API를 통해 검색된 ID를 저장하고 싶은 twitter_id 필드와 같은 이름을 가진 description, screen_name 등의 다른 필드를 가지고있다.트위터 보석 및 레일 문제 저장

# a.tc is a Twitter object already authenticated 
    tws = a.tc.mentions({:count => 200}) 

    # foreach mention 
    tws.each do |t| 
    # Check if we already have it saved 
    p = Profile.find_by_twitter_id t.user.id 
    if p.nil? 
     # Profile doesnt exist, try to save it 
     p = Profile.new(t.user.to_hash) # ERROR! 
     p.twitter_id = t.user.id 
     p.save 
    end 

는 이미 ... 일이지만 모든 것을 trows 오류 많은 시도 루비 멍청한 놈 = P

당신은 하나 Profile에서 사용할 수있는 속성 만 ID를 삭제하거나 할당해야
+0

가 왜'Profile.new (t.user.to_hash)를'사용합니까 실수로 속성을 할당 할 수 있기 때문에 더 나은 방법이 있나요? –

+0

t.user는 Twitter gem의 User 객체이며 프로필 테이블을 만들어서 t.user (Twitter :: User)의 키 중 일부를 필드로 사용합니다 (예 : screen_name, description, location). 그러나 다른 일부 키는 그렇지 않습니다. 내 모델에 존재하기 때문에 모든 데이터에 관심이 없습니다. 오류 : "경고 : 보호 속성을 대량 할당 할 수 없습니다 : id"오류를 이해하지만 프로필에 사용자를 저장하거나 각 필드에 해시를 만들어야 만합니다. 이름? –

답변

2

메신저 :

usr = t.user.to_hash 
    usr.delete :id # or "id", I'm not sure how the Hash looks like exactly 
    ## delete all the other keys that are not neccessary 
    p = Profile.new usr 

또는 을 사용하십시오. 이것은 정확하게 오류가 무엇 당신이 할 노력하고

p = Profile.new (:screen_name => t.user.screen_name, ... and so on...) 
+0

이 답변은 답변이 아닌 댓글이어야합니다. –

+0

아니요, 이것은 제가 수집 할 수있는 OP의 질문에 대한 답변입니다. – henrikhodne

+1

또한 나는 후자의 방식으로 갈 것입니다. 일부 키만 필요하기 때문에 다른 키를 제거하는 대신 키를 명시하는 것이 좋습니다. screenname을 제외한 모든 속성을 원한다면 "delete key"메쏘드로 갈 것입니다. – henrikhodne