我有两个型号
users (id, name, ...)
authorizations (id, provider, provider_uid, user_id,...)
用户has_many授权
现在,当我必须通过facebook登录时,我需要检查provider_uid
是否已预设,如果没有创建新的。
user = User.joins(:authorizations).find_or_initialize_by(
authorizations: {
provider: 'facebook',
provider_uid: provider_uid
}
)
错误
ActiveRecord :: AssociationTypeMismatch - 授权(#70336918074440) 期待,得到阵列(#70336893054160):
答案 0 :(得分:1)
请尝试使用first_or_initialize
代替这两种方案
如果要初始化user
对象
user = User.joins(:authorizations).where("authorizations.provider = 'facebook' AND authorizations.provider_uid = ?", provider_uid).first_or_initialize
但是,如果您想为现有用户查找或创建授权,可以执行此操作,您可以使用first_or_initialize
authorization = Authorization.where(user_id: user_id, provider: 'facebook', provider_uid: provider_uid).first_or_initialize
authorization.save if authorization.new_record?
希望这有帮助!