n u p i n c l u d e A c t i v e M o d e l : : M o d e l a t t r _ r e a d e r : c o m p a n y , : u s e r a t t r _ a c c e s s o r ( : n a m e , : c o m p a n y _ n a m e , : e m a i l ) v a l i d a t e s : c o m p a n y _ n a m e , p r e s e n c e : t r u e v a l i d a t e s : e m a i l , p r e s e n c e : t r u e , e m a i l : t r u e v a l i d a t e s : n a m e , p r e s e n c e : t r u e v a l i d a t e : e m a i l _ u n i q u e n e s d e f s a v e i f v a l i d ? p e r s i s t ! t r u e e l s e f a l s e e n d e n d d e f p e r s i s t e d ? f a l s e e n d p r i v a t e d e f e m a i l _ u n i q u e n e s s e r r o r s . a d d ( : e m a i l , " E m a i l a l r e a d y u s e d d u d e " ) i f U s e r . w h e r e ( e m a i l : e m a i l ) . e x i s t s ? e n d d e f p e r s i s t !
n u p i n c l u d e V i r t u s . m o d e l e x t e n d A c t i v e M o d e l : : N a m i n g i n c l u d e A c t i v e M o d e l : : C o n v e r s i o n i n c l u d e A c t i v e M o d e l : : V a l i d a t i o n s a t t r _ r e a d e r : u s e r a t t r _ r e a d e r : c o m p a n y a t t r i b u t e : n a m e , S t r i n g a t t r i b u t e : c o m p a n y _ n a m e , S t r i n g a t t r i b u t e : e m a i l , S t r i n g v a l i d a t e s : c o m p a n y _ n a m e , p r e s e n c e : t r u e v a l i d a t e s : e m a i l , p r e s e n c e : t r u e , e m a i l : t r u e v a l i d a t e s : n a m e , p r e s e n c e : t r u e v a l i d a t e : e m a i l _ u n i q u e n e s d e f p e r s i s t e d ? f a l s e e n d d e f s a v e i f v a l i d ? p e r s i s t ! t r u e e l s e f a l s e e n d e n d p r i v a t e d e f e m a i l _ u n i q u e n e s s e r r o r s . a d d ( : e m a i l , " E m a i l a l r e a d y u s e d d u d e " ) i f U s e r . w h e r e ( e m a i l : e m a i l ) . e x i s t s ?
n u p V a l i d a t i o n E r r o r = C l a s s . n e w ( S t a n d a r d E r r o r ) i n c l u d e V i r t u s . m o d e l i n c l u d e A c t i v e M o d e l : : V a l i d a t i o n s a t t r i b u t e : n a m e , S t r i n g a t t r i b u t e : c o m p a n y _ n a m e , S t r i n g a t t r i b u t e : e m a i l , S t r i n g v a l i d a t e s : c o m p a n y _ n a m e , p r e s e n c e : t r u e v a l i d a t e s : e m a i l , p r e s e n c e : t r u e , e m a i l : t r u e v a l i d a t e s : n a m e , p r e s e n c e : t r u e d e f p e r s i s t e d ? f a l s e e n d d e f v a l i d a t e ! r a i s e V a l i d a t i o n E r r o r , e r r o r s u n l e s s v a l i d ? e n d e n d
g n u p S e r v i c e d e f c a l l ( f o r m _ o b j e c t ) f o r m _ o b j e c t . v a l i d a t e ! i f U s e r . w h e r e ( e m a i l : f o r m _ o b j e c t . e m a i l ) . e x i s t s ? f o r m _ o b j e c t . e r r o r s . a d d ( : e m a i l , " e m a i l a l r e a d y t a k e n " ) e n d c o m p a n y = C o m p a n y . c r e a t e ! ( n a m e : c o m p a n y _ n a m e ) U s e r . c r e a t e ! ( n a m e : f o r m _ o b j e c t . n a m e , e m a i l : f o r m _ o b j e c t . e m a i l , c o m p a n y : c o m p a n y ) f o r m _ o b j e c t r e s c u e f r o m _ o b j e c t . c l a s s : : V a l i d a t i o n E r r o r f o r m _ o b j e c t # w e h a v e e r r o r s h e r e r e s c u e A c t i v e R e c o r d : : R e c o r d I n v a l i d = > e # a d d a d d i t i o n a l e r r o r s t o f o r m o b j e c t e n d e n d
y C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r d e f n e w @ s i g n u p = S i g n u p . n e w e n d d e f c r e a t e f o r m = S i g n u p . n e w ( p a r a m s [ : s i g n u p ] ) @ s i g n u p = S i g n u p S e r v i c e . n e w . c a l l ( f o r m ) e n d e n d