Ruby on rails 为第一个\u或\u create方法创建条件语句
当允许我的用户从twitter登录时,我使用了first_或_create方法 但是,我想创建一个条件语句,这取决于它是第一个还是创建 如果它是第一个(并且用户在场),我想将它们重定向到X位置。如果创建了用户get,我想将它们重定向到Y位置 目前我的控制器中有: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
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