هل يمكنني تصميم مكتشفي السمة الديناميكي على كائن؟

StackOverflow https://stackoverflow.com/questions/1899960

سؤال

لا تمانع في لي، أنا باكت أسماء السمة الخاصة بي :(

هذا ممكن تماما، باستخدام بناء الجملة الدقيق الذي استخدمته - تحتاج فقط إلى أن تكون قادرا على تهجئة!


لا أستطيع أن أحصل على هذا للعمل، ويبدو أن سيناريو مشترك بما فيه الكفاية يجب أن يكون هناك حل، لكنني لا أمتلك أي حظ في المصطلحات الصحيحة للحصول على نتيجة جوجل مفيدة.

اريد فعل هذا:

u = User.first
u.clients.find_or_create_by_email('example@example.com')

مع تأثير أن جديد Client تم إنشاؤها مع user_id = u.id.

هل يمكنني الحصول على الباحثين الديناميون لطيفة من خلال has_many علاقة؟ إذا لم يكن كذلك، لماذا؟

شكرا :)

هل كانت مفيدة؟

المحلول 2

هذا ممكن تماما، باستخدام بناء الجملة الدقيق الذي استخدمته - تحتاج فقط إلى أن تكون قادرا على تهجئة!

نصائح أخرى

هذه

u = User.first
u.clients.find_or_create_by_email('example@example.com')

يعمل إذا كان لديك مجموعة علاقة has_many. ومع ذلك، لن يرفع خطأ التحقق من الصحة إذا كان لديك أي تحويلات محددة على كائن العميل الخاص بك وسوف تفشل بصمت إذا فشل التحقق من الصحة.

يمكنك التحقق من الإخراج في وحدة التحكم الخاصة بك عند القيام به

u.clients.find_or_create_by_email('example@example.com') # => #<Client id: nil, email: 'example@example.com', name: nil, user_id: 1, another_attribute: nil, active: true, created_at: nil, updated_at: nil>

وسيتم تعيين user_id ولكن ليس معرف العميل لأنه فشل التحقق من الصحة ولا يتم إنشاء العميل

لذلك يجب أن ينشئ هذا العميل فقط إذا قمت بتمرير جميع السمات المطلوبة لكائن العميل وتم تمرير التحقق من الصحة لكائن العميل بنجاح.

لذلك دعونا نقول أن طراز العميل الخاص بك لديه صحة على الاسم أيضا بصرف النظر عن البريد الإلكتروني ثم يجب عليك القيام به

u.clients.find_or_create_by_email_and_name('example@example.com', 'my_name') #=> #<Client id: 1, email: 'example@example.com', name: 'my_name', user_id: 1, another_attribute: nil, active: true, created_at: "2009-12-14 11:08:23", updated_at: "2009-12-14 11:08:23">
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top