我有以下型号
users (id, name, ...)
authorizations (id, provider, provider_uid, token, user_id, ...)
用户has_many授权
@user = User.new(first_name: facebook_client.first_name,
last_name: facebook_client.last_name,
email: facebook_client.email,
bio: facebook_client.bio,
date_of_birth: facebook_client.birthday,
gender: facebook_client.gender,
location: facebook_client.location)
@user.authorizations.build(
provider: 'facebook',
provider_uid: facebook_client.user_id,
oauth_token: facebook_user_token,
social_account: SocialAccount.friendly.find('facebook'))
我有一个验证
validates :user_id, presence: true
由于上述情况,我无法保存@user.save
当我通过@user.authorizations.build
答案 0 :(得分:1)
如果您想确定存在关联,则需要测试关联对象本身是否存在,并且不是使用的外键来映射关联。
这意味着您必须将validates :user_id, presence: true
验证替换为以下内容:
class Authorization < ActiveRecord::Base
belongs_to :user
validates :user, presence: true
end
class User < ActiveRecord::Base
has_many :authorizations, inverse_of: :user
end
答案 1 :(得分:1)
如果给定代码完成,这只是因为你没有保存(持久化)@user,所以它没有id。它需要一个id来创建一个关联(通过它的id链接到该记录)。
如果您签入代码,您应该看到:
@user = User.new...
@user.id => nil
没有id的记录不能有任何关联(不属于belongs_to)。