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 的过程中,我更改了关系类型,所以当第一个问题解决时,它总是先找到旧关系(使用旧类型)所以找不到相应的用户节点。