2016-09-21 4 views
0

У меня есть модель User, которая has_one Profile (принадлежит пользователю). Для простоты я просто скажу, что у профиля есть поле location и поле occupation.Рельсы: Создание отношения has_one в модели с Omniauth

Я использую Omniauth для создания Пользователей, но я также хотел бы создать прикрепленный файл Profile в то же время. В настоящее время мой create из OmniAuth метода заключается в следующем:

def self.create_from_omniauth(omniauth_data) 
    full_name = omniauth_data["info"]["name"].split(" ") 
    User.create(
     provider: omniauth_data["provider"], 
     uid: omniauth_data["uid"], 
     first_name: full_name[0], 
     last_name: full_name[1], 
     email: omniauth_data["info"]["email"], 
     password: SecureRandom.hex(16) 
) 
end 

мне интересно, как я должен включать строительство профиля в этом. Я знаю, has_one У меня есть доступ к методу build_profile, но я также хочу убедиться, что он правильно подключен к моему объекту User. Любое понимание того, как я должен переформатировать, что create_from_omniauth действие для правильной сборки связанного Profile рядом с объектом User было бы очень полезно.

+0

Существует как минимум два способа сделать это, и если вы измените третью строку на 'user = User.create', вы можете сделать' user.create_profile() '. Вместо «User.create» и 'user.create_profile' используйте сборку, а затем сохраните ее сразу с помощью' user.save' –

ответ

1

Более простой способ сделать то, что вы хотите, это использовать действие # show для профиля. Вместо создания модели профиля с таблицей профилей в базе данных (потеря памяти), почему бы просто не использовать показ для ваших пользователей в качестве профиля. В этом случае вы можете переименовать маршрут для вашего действия show в качестве профиля.

+0

. Моя модель «Profile» фактически обрабатывает больше, чем просто этот упрощенный пример, поэтому мне нужно отношение has_one I не могут просто включать эти поля в модель «Пользователь». Я хочу просто создать исходные фрагменты из данных «Omniauth» – Brett

Смежные вопросы