سؤال

أنا أعمل مع نماذج مشابهة لما يلي:

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 في عبارات البحث الخاصة بك.لاحظ أن هذا قد يكون مفيدًا للتحسين ولكنه ليس ضروريًا منذ البداية.

آمل أن يساعد هذا.

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