在neo4j无法正常运行的rails中查找

时间:2015-03-05 22:32:48

标签: ruby-on-rails facebook neo4j

这个问题意味着两个问题:

我有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

1 个答案:

答案 0 :(得分:0)

问题1:由于我将auth.uid存储为整数,但它以字符串形式返回,我需要添加.to_i(因此在params中我会有uid:auth.uid。 to_i)

问题2:在查找问题1中的问题时,我更改了关系类型,因此当第一个问题解决后,它始终首先找到旧关系(使用旧类型)所以它找不到相应的用户节点。