2012-04-04 7 views
1

im создание приложения, которое извлекает все упоминания с помощью twitter, у меня есть модель профиля, где я хочу сохранить всех пользователей, которые отправили упоминание. На этой таблице у меня есть поле twitter_id, где я хочу сохранить идентификатор, полученный через API twitter .. и другие поля, такие как описание, имя_экземпляра и т. Д., Которые имеют одинаковые имена.Twitter Gem and Rails issue save user

# 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

+0

Почему вы используете 'Profile.new (t.user.to_hash)', что именно ошибка и что вы пытаетесь сделать там? –

+0

t.user - объект пользователя из gem Twitter, и я создал таблицу Profile, чтобы иметь НЕКОТОРЫЕ ключи от t.user (Twitter :: User) в виде полей, например: screen_name, описание, местоположение, но некоторые другие ключи не существует в моей модели, потому что я не интересуюсь всеми данными. ошибка: «ПРЕДУПРЕЖДЕНИЕ: невозможно назначить защищенные атрибуты: id» Я понимаю ошибку, но как я могу сохранить пользователя в профиле, или мне нужно создать хэш с каждым интересующим полем, не заботятся о том, что он разделяет то же самое имя? –

ответ

2

Вы должны либо удалить идентификатор или назначить только те атрибуты, которые доступны в Profile:

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

Нет, это ответ на вопрос ОП, из того, что я могу собрать. – henrikhodne

+1

Кроме того, я бы пошел последним путем. Поскольку вам нужны только некоторые ключи, лучше быть откровенными о них, а не удалять другие. Если бы вы хотели, скажем, всех атрибутов, кроме имени экрана, тогда я бы пошел с методом «удалить ключ». – henrikhodne