DataMapper ديه ن من خلال حذف الموارد (إزالة من الجمعيات) لا يعمل
-
07-07-2019 - |
سؤال
وأنا لديك هذه فئتين،
class User
include DataMapper::Resource
property :id, Serial
property :name, String
has n :posts, :through => Resource
end
class Post
include DataMapper::Resource
property :id, Serial
property :title, String
property :body, Text
has n :users, :through => Resource
end
وهكذا مرة واحدة لدي وظيفة جديدة مثل:
Post.new(:title => "Hello World", :body = "Hi there").save
وأواجه مشاكل خطيرة لإضافة وإزالة من الجمعيات، مثل:
User.first.posts << Post.first #why do I have to save this as oppose from AR?
(User.first.posts << Post.first).save #this just works if saving the insertion later
وكيف ينبغي أن إزالة المشاركة من هذا الارتباط؟ أنا باستخدام التالية ولكن بالتأكيد ليست العمل:
User.first.posts.delete(Post.first) #returns the Post.first, but nothing happens
User.first.posts.delete(Post.first).save #returns true, but nothing happens
User.first.posts.delete(Post.first).destroy #destroy the Post.first, not the association
وهكذا أنا حقا لا أعرف كيف لحذف هذا من صفيف BoltUser.
المحلول
وهذه الطريقة () الحذف، وأساليب أخرى من صفيف تعمل فقط على نسخة في الذاكرة من المجموعات. انهم في الواقع لا تعديل أي شيء حتى كنت لا تزال قائمة الكائنات.
وأيضا، وجميع الإجراءات CRUD أجريت على مجموعة يؤثر في المقام الأول الهدف. وهناك عدد قليل، مثل إنشاء () أو تدمير ()، وإضافة / إزالة الموارد الوساطة في العديد من العديد من المجموعات، ولكن هذا فقط من الآثار الجانبية لإنشاء أو إزالة الهدف.
في الحالة الخاصة بك، إذا أردت إزالة فقط أول بوست، هل يمكن أن تفعل هذا:
User.first.posts.first(1).destroy
والجزء User.first.posts.first(1)
بإرجاع مجموعة خاصة بتطبيق فقط لأول وظيفة. داعيا تدمير على جمع يزيل كل شيء في جمع (والذي هو مجرد السجل الأول) ويشمل وسطاء.
نصائح أخرى
وتمكنت من القيام بذلك عن طريق القيام:
#to add
user_posts = User.first.posts
user_posts << Bolt.first
user_posts.save
#to remove
user_posts.delete(Bolt.first)
user_posts.save
وأعتقد أن الطريقة الوحيدة للقيام بذلك هي من خلال العمل مع الإجراءات سبيل المثال، هل التغييرات على هذا المثال وبعد الانتهاء، مجرد حفظه.
وانها نوع مختلف من من AR، ولكن يجب أن يكون على ما يرام بالرغم من ذلك.