القضبان نموذج المستخدم has_many الأنشطة (المراقب) ولكن يجب أيضا ملاحظة
-
19-09-2019 - |
سؤال
أنا أركض في مشكلة مع القائمة ActiveRecord::Observer
النموذج الذي يسجل مختلف Activities
من أ User
الموقع. كل شيء كان يعمل بشكل جيد حقا، حتى حاولت observe
ال User
فئة مع نفسه Activity
نموذج يستخدم ل observe
نماذج أخرى. اعتبر ذلك:
class Activity < ActiveRecord::Base
belongs_to :user
belongs_to :item, :polymorphic => true
end
class ActivityObserver < ActiveRecord::Observer
observe :billing, :call, :vanity_number
end
class User < ActiveRecord::Base
has_many :comments
has_many :activities
end
class Comment < ActiveRecord::Base
belongs_to :user
has_many :activities, :as => :item
end
عملت أعلاه بشكل جيد. استفسار ل User.activities
سوف تعود صفوف Comment
Activities
. وبعد بمجرد أن أضفت :user
إلى observe
طريقة في ActivityObserver
وتغييرها has_many :activities
في ال User
نموذج has_many :activities, :as => :item
, User.activities
سيعود فقط الصفوف التي كانت أنشطة تتعلق بذلك User
ومثال ليس أي Comments
لماذا هذا؟ ماذا يمكنني أن أفعل للحصول على هذا العمل كما هو متوقع؟
المحلول
عندما تغيرت
class User < ActiveRecord::Base
has_many :activities
end
ل
class User < ActiveRecord::Base
has_many :activities, :as => :item
end
إنه ينظر الآن إلى item_id
الحقل في جدول الأنشطة حيث يكون حقل النوع المستخدم للمستخدم لسحب الأنشطة item_id = users.id
. وبعد قبل أن تنظر إلى user_id
الحقل في الأنشطة. منذ item_id
لا يمكن أن تحتوي مجال الحقل والنوع على قيمتين، قمت بإجراء ذلك حتى يشير النشاط إلى مستخدم أو تعليق. لا يمكن أن يكون كليهما.