جمعية mongomapper has_many
-
19-09-2019 - |
سؤال
لدي مشكلة مع جمعيات Mongomapper. لدي مستخدم أسماء فئة واحدة وغيرها من الطراز المسمى. المستخدم لديه العديد من النماذج ولكن ...
user = User.first
=> <User ...
user.models
=> []
Model.find_by_user_id(user.id.to_s)
=> <Model ...
Model.find_by_user_id(user.id.to_s).user == user
=> true
رمز الفصل (مبسط):
class User
include MongoMapper::Document
# some keys definition
many :models
end
class Model
include MongoMapper::Document
# some keys definitions
belongs_to :user
end
ما أقوم به خطأ؟
المحلول
يبدو أنه لم يعد MM يستخدم تنسيق السلسلة لعمود FK، لذلك
Model.find_by_user_id(user.id.to_s)
يجب ان يكون
Model.find_by_user_id(user.id)
علاوة على ذلك، يجب تعيين نموذج البيانات الخاص بعمود Model.USER_ID
key :user_id, Mongo::ObjectID
عندما أشارت إلى هذه المشكلة، اضطررت إلى حذف وإعادة إنشاء مجموعتي للحصول عليها للعمل - بمعنى آخر اعتدت أن يكون لديك user_id كسلسلة، لكنه لن يحدث إلا "اتخاذ" عندما قمت بإعادة بناء قاعدة البيانات الخاصة بي. لحسن الحظ أنا أعمل مع بيانات الاختبار بحيث كان من السهل بما فيه الكفاية.
نصائح أخرى
ما نوع الأخطاء أو الاستثناءات التي تحصل عليها؟ يبدو الكود الذي نشرته بشكل جيد.
آه، وهذا هو موثق بشكل سيء في مستندات MM. تحتاج إلى القيام بذلك هنا:
class User
include MongoMapper::Document
# some keys definition
many :models, :in => :model_ids
end
class Model
include MongoMapper::Document
# some keys definitions
# no belongs_to necessary here
end
يمكنك بعد ذلك إضافة نماذج إلى المستخدم الخاص بك عن طريق:
# use an existing object
u = User.create ...
m = Model.create ...
# and add the model to the user
u.models << m
# don't forget to save
u.save
# you can then check if it worked like so:
# u.model_ids => [ BSON::ID 'your user id']
نأمل أن ساعد.