- (let ((val (slot-value model (car s))))
- (return-from explode-foreign-key
- (values (if val val (make-instance (getf (cdr s) :join-class)))
- (getf (cdr s) :foreign-key)))))))
+ (let* ((fkey (getf (cdr s) :foreign-key))
+ (new (sync-instance (make-instance (getf (cdr s) :join-class))))
+ (val (or (slot-value model (car s))
+ (progn
+ (when createp
+ (setf
+ (slot-value model slot)
+ (slot-value new fkey))
+ (sync-instance model)
+ (slot-value model (car s)))))))
+
+ (return-from explode-foreign-key
+ (values val fkey))))))