2011-04-22 17 views
8

मान लें कि मेरे पास एक स्टैंडअलोन उपयोगकर्ता मॉडल और सेवा मॉडल है।रेल पर रूबी: उचित रूप से मॉडल मॉडल बनाना जो कई मॉडलों के संबंध में है

मेरे पास एक ऑर्डर मॉडल भी है जो किसी उपयोगकर्ता द्वारा सेवा के लिए बनाए गए ऑर्डर रखता है। मैं सोच रहा हूं कि मैं रेलवे में ऑर्डर एंट्री कैसे ठीक से बना सकता हूं।

यहां बताया गया है कि अगर मैं केवल एक अन्य मॉडल को संदर्भित करता हूं तो मैं ऑर्डर एंट्री कैसे बनाउंगा।

@order = current_user.orders.build(params[:order]) 
@order.save 

अब अगर मैं एकाधिक मॉडल (उपयोगकर्ता और सेवा) को संदर्भित करता हूं तो मैं यह कैसे कर सकता हूं?

मान लें कि ऑर्डर मॉडल में user_id और service_id विशेषताएँ हैं और सभी मॉडल ऑब्जेक्ट्स संबंधित_to और has_many रिश्तों के साथ ठीक से टैग किए गए हैं।

उत्तर

2

यह है कि कैसे मैं इस समस्या को हल करने के लिए होगा , अधिमानतः पहला तरीका।

current_user.orders.create!(params[:order].merge({ :service => @service })) 

or 

@service.orders.create!(params[:order].merge({ :user => current_user })) 
6
@order = Order.new(params[:order]) 
@order.user = current_user 
@order.service = @service 
@order.save 

कहाँ @service कुछ अपने लाई गई सेवा

+0

प्रश्न का उत्तर नहीं देता है। –

+0

ओह, मुझे खेद है, क्षमा करें। मैं अब अपना उत्तर अपडेट कर दूंगा – fl00r

0

मेरा मानना ​​है कि वहाँ इस मामले के लिए कोई 'जादू' तरीका है। लेकिन तर्क यह है कि आप एक आदेश बना जब दोनों उपयोगकर्ता और सेवा alredy मौजूद हैं, इसलिए सेवा पहले से ही user_id विशेषता रखती है और आप शायद service.orders पर निर्माण बुलाना चाहिए है:

@order = service.orders.build(params[:order].merge({ :user_id => service.user_id })) 
+0

सेवा मॉडल में user_id होने के कारण मेरे लिए कोई विकल्प नहीं है, यह आपके उत्तर के समान कुछ करने का एहसास करता है। मैं ऑर्डर पैरा के साथ service_id को मर्ज करना पसंद करता हूं और उपयोगकर्ता को ऑर्डर बनाने देता हूं। –

संबंधित मुद्दे