Ruby on rails 为第一个\u或\u create方法创建条件语句

Ruby on rails 为第一个\u或\u create方法创建条件语句,ruby-on-rails,Ruby On Rails,当允许我的用户从twitter登录时,我使用了first_或_create方法 但是,我想创建一个条件语句,这取决于它是第一个还是创建 如果它是第一个(并且用户在场),我想将它们重定向到X位置。如果创建了用户get,我想将它们重定向到Y位置 目前我的控制器中有: def create user = User.from_omniauth(env["omniauth.auth"]) # returned from the model if user.save session[:u

当允许我的用户从twitter登录时,我使用了first_或_create方法

但是,我想创建一个条件语句,这取决于它是第一个还是创建

如果它是第一个(并且用户在场),我想将它们重定向到X位置。如果创建了用户get,我想将它们重定向到Y位置

目前我的控制器中有:

def create
  user = User.from_omniauth(env["omniauth.auth"])
  # returned from the model
  if user.save
    session[:user_id] = user.id
    redirect_to campaigns_path, notice: "Signed in"
  else
    redirect_to :back, alert: 'Unable to sign you in!'
  end
end
我试过了

elsif user.exists?
但那没用。我的模型如下所示:

def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.provider             = auth.provider
    user.profile_image_url    = auth.info.image
    user.followers_count      = auth.followers_count
    user.uid                  = auth.uid
    user.access_token         = auth.credentials.token
    user.access_token_secret  = auth.credentials.secret
    user.name                 = auth.info.name
    user.nickname             = auth.info.nickname
    user.website              = auth.info.urls.website
    user.save
  end
end
Create(first_或_Create)保存模型,因此所有持久性检查都不会显示任何差异,相反,我会尝试
first_或_initialize

where(provider: auth.provider, uid: auth.uid).first_or_initialize do |user|
然后需要从方法体中删除这一行

user.save
然后稍微调整一下条件

if user.persisted?
  user.save # unless you have more editing first
  # handle old user
elsif user.save
  # this means the user is saved successfully
else
  # new user but wasn't saved
end

您是否尝试过
user.persisted?
而不是
user.exists?
?似乎没有影响由于某种原因,旧用户仍然触发persisted旧用户应该被持久化,而不是新用户。(旧用户=第一次的结果,persisted=true),(新用户=初始化的结果,persisted=false)新的一个进入user.persistend也是出于某种原因。我知道,您需要从omniauth方法中删除
user.save
,并在输入
if