find_or_create_by_provider_and_uid大吼大叫ActiveRecord拥有“创造”

时间:2012-04-13 05:15:23

标签: ruby-on-rails activerecord omniauth

我正在通过此railscasts剧集实现twitter / facebook OAuth登录:

http://railscasts.com/episodes/235-omniauth-part-1

我正在使用github上的Omniauth README代码:

  def oauthing
    auth = request.env['omniauth.auth']
    current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid'])
    flash[:notice] = "Authentication Successful"
    redirect_to '/'
  end

它会引发有关属于ActiveRecord的方法“create”的错误。现在,如果我删除“_or_create”,我可以使上面的代码工作,但现在我只能使用Twitter / Facebook OAuth来验证现有用户,而不是创建新用户。

我像疯了一样用Google搜索,但没有成功。我如何才能完成这项工作,以便通过Omniauth创建帐户而不仅仅是进行身份验证?

1 个答案:

答案 0 :(得分:0)

拆分查询并尝试:

is_user = current_user.authentications.find_by_provider_and_uid(auth['provider'], auth['uid'])

current_user.authentications.create(:provider => auth['provider'], :uid => auth['uid']) if is_user.nil?