2016-09-21 164 views
0

我有一个User模型has_one Profile(belongs_to用户)。为简单起见,我只是说配置文件有一个location字段和一个occupation字段。Rails:使用Omniauth在模型中建立一个has_one关系

我使用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方法,但我也想确保它已正确连接到我的用户对象。任何有关如何重新格式化create_from_omniauth操作以正确构建与User对象相关联的Profile都非常有帮助。

+0

至少有两种方法可以做到这一点,如果您将第三行更改为'user = User.create',则可以执行'user.create_profile()'。而不是'User.create'和'user.create_profile'使用build,然后用'user.save'一次性保存它。 –

回答

1

更简单的方法来做你想做的就是使用用户#显示配置文件的行动。与其在数据库中创建具有配置文件表的配置文件模型(浪费内存),不如将用户的配置文件用作配置文件。在这种情况下,您可以将show动作的路线重命名为配置文件。

+0

我的'Profile'模型实际上处理的不仅仅是这个简单的例子,所以我需要has_one关系I不能只在'User'模型中包含这些字段。我期望从“Omniauth”数据中创建最初的部分 – Brett