所以我正在使用mongoid和纯omniauth构建一个webapp。我按照教程here进行了操作,但是我遇到了mongodb试图两次插入相同记录并抛出重复键错误的问题。有没有办法让我弄清楚第二个插件的来源?
以下是会话控制器的代码:
def create
auth = request.env["omniauth.auth"]
@user = User.where(:provider => auth['provider'], :uid => auth['uid']).first || User.create_with_omniauth(auth)
session[:user_id] = @user.id
redirect_to user_path(@user), :notice => "Signed in!"
end
这是create_with_omniauth
的用户模型中的代码def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth['provider']
puts "finish provider"
user.uid = auth['uid']
puts "finish uid"
if auth['info']
user.name = auth['info']['name'] || ""
puts "finish name"
user.email = auth['info']['email'] || ""
puts "finish email"
user.oauth_token = auth.credentials.token
puts "made oath token"
user.save!
puts "Saving the user"
end
puts "outside if"
end
puts "about to exit"
end
因此,在服务器日志中,我看到完成提供程序,完成uid,完成名称,完成电子邮件,制作誓言令牌,插入,然后保存用户,在外面是否,即将退出,然后是另一个插入。但是从会话控制器中的代码我的用户使用查询或创建。我不知道我会在哪里做另一个插入。
谢谢!
编辑:添加了代码
答案 0 :(得分:1)
您通常调试内容的方法是逐步完成调用 - 您可以使用REPL,例如PRY。另一种选择就是进行二进制消除 - 在代码中的某个点开始并确保问题是在该点之前或之后,将该下一个断点移向该方向,然后重复此操作直到缩小原因。
总的来说,除非您提供的代码无效或只是提供更多信息,否则很难帮助您。现在你正在说"有什么不对,它是什么",没有其他人知道什么"什么"是或什么"错误"手段。你只是不能以这种方式得到任何有用的帮助。