【发布时间】:2011-10-10 15:41:28
【问题描述】:
我正在尝试一次创建 3 个嵌套模型,但在验证时遇到了问题。
这些是我的模型:
class UserEntity < ActiveRecord::Base
has_many :users, :dependent => :restrict, :autosave => true
end
class User < ActiveRecord::Base
has_many :user_login_services, :dependent => :destroy, :autosave => true
belongs_to :user_entity
end
class UserLoginService < ActiveRecord::Base
belongs_to :user
#validates :user_id, :presence => true
end
(UserEntity可以是一家公司,有很多用户。UserLoginService用于Facebook、openID等Omniauth服务)
用户是用
创建的def new_user_login(tokens)
user_entity = UserEntity.new
user = user_entity.users.build(:email => tokens[:email], :password => Devise.friendly_token[0,20], :first_name => tokens[:first_name], :last_name => tokens[:last_name], :has_local_password => false)
user.skip_confirmation!
user.user_login_services.build(:provider => tokens[:provider], :uid => tokens[:uid], :uname => tokens[:name], :uemail => tokens[:email])
user_entity.save!
user.confirm!
此代码似乎运行良好,并在所有 3 个表中创建了适当的条目。当我在 UserLoginService 中取消注释 'validates :user_id, :presence => true' 时,就会出现问题,这让我很满意
ActiveRecord::RecordInvalid (Validation failed: Users user login services user can't be blank):
app/controllers/users/omniauth_callbacks_controller.rb:86:in `new_user_login'
请注意,代码在没有验证的情况下似乎可以正常工作,并且 user_login_services 表中的 user_id 设置为正确的值。
为什么会出现此错误,我该如何解决?
【问题讨论】: