Rails:使用Omniauth在模型中构建has_one关系

时间:2016-09-21 21:57:12

标签: ruby-on-rails omniauth has-one

我有一个User模型,其中包含Profile(belongs_to用户)。为简单起见,我只是说该个人资料有location字段和occupation字段。

我使用Omniauth创建用户,但我还希望同时创建附加的Profile。目前,来自omniauth方法的create如下:

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将非常有帮助。

1 个答案:

答案 0 :(得分:1)

执行所需操作的更简单方法是使用配置文件的用户#show action。而不是在数据库中创建具有配置文件表的配置文件模型(浪费内存),为什么不将这个显示作为配置文件用于您的用户。在这种情况下,您可以将show动作的路线重命名为个人资料。