这个问题意味着两个问题:
我有2个模型 - User和SocialNetworkConnection
当用户通过facebook进行身份验证时,我想创建两个对象的记录。创建它们和关系很好。
问题1:问题是 find_by 方法无效,而是创建了2条记录,即使用户和soc_network_con已经存在。
如果我尝试通过插入硬编码提供程序来使用find_by,那么它就可以工作。
我已经检查了auth.provider和auth.uid的输出是什么,它应该是什么。我通过传入request.env ['omniauth.auth']在我的控制器中使用这个方法。
问题2:当找到SocialNetworkConnection记录时,我想找到相应的用户节点,但 user_connection.user 行似乎不起作用(尝试过在irb)。
user.rb
class User
include Neo4j::ActiveNode
property :name, type: String
property :email, type: String
property :image_url, type: String
has_many :in, :social_network_connections, origin: :user
end
social_network_connection.rb
class SocialNetworkConnection
include Neo4j::ActiveNode
property :provider, type: String
property :uid, type: Integer
property :token, type: String
property :expires_at, type: Integer
has_one :out, :user, type: :connection_to
def self.find_for_facebook_oauth(auth)
user_connection = SocialNetworkConnection.find_by(provider: auth.provider, uid: auth.uid )
if user_connection
user = user_connection.user
else
user_connection = SocialNetworkConnection.create!(provider:auth.provider,
uid:auth.uid,
token:auth.credentials.token,
expires_at:auth.credentials.expires_at
)
user = User.create!(name:auth.info.name,
email:auth.info.email,
image_url:auth.info.image
)
user.social_network_connections << user_connection
end
return user
end
end
答案 0 :(得分:0)
问题1:由于我将auth.uid存储为整数,但它以字符串形式返回,我需要添加.to_i(因此在params中我会有uid:auth.uid。 to_i)
问题2:在查找问题1中的问题时,我更改了关系类型,因此当第一个问题解决后,它始终首先找到旧关系(使用旧类型)所以它找不到相应的用户节点。