3つのネストされたモデルを一度に作成しようとしていて、検証に問題があります。ネストされたモデルの作成 - Rails 3.1
は、これらの私のモデルです:
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つのテーブルすべてに適切なエントリを作成します。コードは、検証せずに正常に動作しているようだ、とuser_login_servicesテーブル内のuser_idであることを私に
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'
を取得UserLoginService、中注私は「:user_idは、存在=>真を検証する」アンコメントすると、問題が発生します適切な値に設定します。
なぜこのエラーが発生しますか?これをどのように解決しますか?
ありがとう、inverse_ofを指定してくれてありがとうございました!そうでなければ、Railsは保存したときにネストされたモデルを最初に保存しようとします(ネストされたモデルはbelongs_toのトップモデルになります)。これはトップモデルがまだ作成されていないため失敗します。 – astgtciv