القضبان: احفظ سجلًا عبر الانتماء _TO ووضع المفتاح الأجنبي

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

سؤال

هل هناك طريقة أفضل لكتابة هذا الرمز؟ إنه لا يجلس معي بشكل صحيح ، أشعر أن هناك شيئًا ما مثل "قضبان مثل" التي يجب أن أعرفها بالفعل:

belongs_to :parent_in_use
belongs_to :parent_template

def after_create
  new_parent_in_use = ParentInUse.create!(self.parent_template.attributes)
  self.update_attribute(:parent_in_use_id, new_parent_in_use.id)
end

بعد إنشاء سجل ، آخذ القالب الأصل المحدد وإنشاء ملف parent_in_use سجل بناءً عليه. وبهذه الطريقة ، يمكن أن يتغير القالب وسيعيش سجل IN_USE مع كائني إلى الأبد. ترث كل من فئات ParentInuse و ParentTemplate من الوالد باستخدام STI.

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

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

المحلول

هذا سيفعل ما تبحث عنه.

def after_create 
  self.parent_in_use = ParentInUse.create!(parent_template.attributes)
end

ولكن بدون تغييرات أخرى ، لن تفعل أي شيء جيد. نظرًا لأن المفتاح الخارجي يتم تخزينه في النموذج الحالي ، فلن يحفظ ActivereCord التغيير إذا تم إنشاء هذا الارتباط عن طريق مكالمة After_create مرة أخرى. سيتم حفظ كائن ParentInuse الجديد ، ولكن لن يتم تحديث صف قاعدة البيانات للنموذج الحالي باستخدام هذا Parent_IN_US_ID المقابل.

نسميها كمكالمة قبل _create مرة أخرى وسوف تسير الأمور بسلاسة أكثر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top