find_by 在 rails 中,neo4j 不工作
find_by in rails with neo4j not working
这个问题隐含了2个问题:
我有 2 个模型 - 用户和 SocialNetworkConnection
当用户通过 facebook 进行身份验证时,我想创建两个对象的记录。它们和关系的创建工作正常。
问题 1: 问题是 find_by 方法不起作用,反而创建了 2 个记录,即使用户和 soc_network_con 已经存在。
如果我尝试通过插入硬编码提供程序和 uid 来使用 find_by,它会起作用。
我已经检查了 auth.provider 和 auth.uid 的输出是什么,它应该是什么。我通过传入 request.env['omniauth.auth'].
在我的控制器中使用此方法
问题2:当找到A SocialNetworkConnection记录时我想找到对应的User节点但是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
问题 1: 因为我将 auth.uid 存储为一个整数,但它作为一个字符串返回,我需要添加 .to_i (所以在我将拥有 uid 的参数:auth.uid.to_i)
问题 2: 在寻找问题 1 的过程中,我更改了关系类型,所以当第一个问题解决时,它总是先找到旧关系(使用旧类型)所以找不到相应的用户节点。
这个问题隐含了2个问题:
我有 2 个模型 - 用户和 SocialNetworkConnection
当用户通过 facebook 进行身份验证时,我想创建两个对象的记录。它们和关系的创建工作正常。
问题 1: 问题是 find_by 方法不起作用,反而创建了 2 个记录,即使用户和 soc_network_con 已经存在。
如果我尝试通过插入硬编码提供程序和 uid 来使用 find_by,它会起作用。
我已经检查了 auth.provider 和 auth.uid 的输出是什么,它应该是什么。我通过传入 request.env['omniauth.auth'].
在我的控制器中使用此方法问题2:当找到A SocialNetworkConnection记录时我想找到对应的User节点但是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
问题 1: 因为我将 auth.uid 存储为一个整数,但它作为一个字符串返回,我需要添加 .to_i (所以在我将拥有 uid 的参数:auth.uid.to_i)
问题 2: 在寻找问题 1 的过程中,我更改了关系类型,所以当第一个问题解决时,它总是先找到旧关系(使用旧类型)所以找不到相应的用户节点。