2017-02-11 11 views
6

first_or_create बहुत कम दस्तावेज प्रतीत होता है, इसलिए मुझे आश्चर्य हुआ कि यह सिर्फ इसलिए था क्योंकि दोनों विधियां समानार्थी हैं।first_or_create बनाम find_or_create_by

उत्तर

14

असल:

Foo.where(attributes).first_or_create 

रूप में एक ही है:

Foo.find_or_create_by(attributes) 

#first_or_create कभी कभी गलत समझा जाता है के रूप में लोगों को यह दिया विशेषताओं के आधार पर खोज करने की उम्मीद है, लेकिन यह मामला नहीं है। उर्फ

Foo.first_or_create(attributes) 

एक foo कि attributes को संतुष्ट करता है के लिए खोज नहीं करेंगे। यदि कोई मौजूद है तो यह पहले foo लेगा। यह उपयोगी है अगर खोज की स्थितियां सृजन के लिए उपयोग किए गए लोगों का सबसेट हैं। उर्फ

Foo.where(something: value).first_or_create(attributes) 

पहले foo जहां something: value मिल जाएगा। यदि कोई भी मौजूद नहीं है, तो इसे बनाने के लिए attributes का उपयोग किया जाएगा।

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