التحميل الشديد لا يعمل في Rails 2.2.2
-
21-08-2019 - |
سؤال
أنا أعمل مع نماذج مشابهة لما يلي:
class Owner < ActiveRecord::Base
has_many :owned
end
class Owned < ActiveRecord::Base
belongs_to :owner
end
يمكنك افتراض أن own_id وowner_id موجودان في المكانين الصحيحين.المشكلة هي أنه في وحدة التحكم لسلسلة mvc مختلفة في التطبيق،
@owner = Owned.find_by_id(owned_id, :include => :owner)
لا يعمل.أحصل على عمود Owner_id بشكل طبيعي، لكن لا يمكنني فعل ذلك بعد ذلك
@owned.owner # is just nil
ما يعطي؟أعني أنه يمكنني القيام بالمهمة مباشرة قبل تمرير النتيجة إلى العرض:
@owned.owner = Owner.find_by_id(@owned.owner_id)
ولكن هذا يبدو سخيفا فقط.هيا، إحراج لي.ما هو الشيء الواضح الذي فاتني؟يعمل هذا في أماكن أخرى في تطبيقي، لكن لا يمكنني تحديد الاختلافات.هل هناك بعض الفخاخ المشتركة؟أي شيء يساعد.
شكرًا لك
المحلول
وأواصل الفوز. قد تم حذف الكائن 'المالك' المقابلة من الجدول أصحابها.
والشيء المضحك هو، قبل أن إنشاء حساب، كان لي طن من الكرمة على هويتي القائم على الكعكة. ثم أصبح بلدي الكوكيز تلف، وأنا لا يمكن أن أطلب أي شيء ولكن أسئلة غبية بعد الآن، وبلدي الكرمة يجلس في 1. حسنا.
نصائح أخرى
السمعة على StackOverflow لا تعتمد على ملفات تعريف الارتباط.قد تضطر إلى تسجيل الدخول مرة أخرى أو شيء من هذا.
يبدو أن سؤالك يشير ضمنًا إلى أن لديك حقل own_id في جدول المالك.لا تحتاج لذلك ويجب إزالته.
تحتاج فقط إلى حقل عدد صحيح Owner_id في الجدول المملوك.
يمكنك الوصول إلى سجلاتك وعلاقاتك بعدة طرق.لنبدأ أولاً بالوصول إلى سجل المالك أولاً.
owner = Owner.find(owner_id)
owned = owner.owned # this is an array since you a 'has_many' relationship
عادةً ما تريد الوصول إلى السجلات المملوكة بالطريقة التالية:
for owned in owner.owned
puts owned.name # or access any other attributes
end
إذا كنت ترغب في الوصول إلى السجلات المملوكة أولاً، فيمكنك القيام بما يلي:
@owned = Owned.find(:all, :conditions => [ "owner_id = ?", owner_id ])
# @owned is an array so you need to iterate through it
for owned in @owned
puts owned.owner.name # or access any other attribute from the owner
end
بمجرد أن تعمل هذه الاستعلامات بشكل جيد، يمكنك القلق بشأن التحميل المتلهف عن طريق إضافة :include في عبارات البحث الخاصة بك.لاحظ أن هذا قد يكون مفيدًا للتحسين ولكنه ليس ضروريًا منذ البداية.
آمل أن يساعد هذا.