القضبان نموذج المستخدم has_many الأنشطة (المراقب) ولكن يجب أيضا ملاحظة

StackOverflow https://stackoverflow.com/questions/1892035

سؤال

أنا أركض في مشكلة مع القائمة 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 لا يمكن أن تحتوي مجال الحقل والنوع على قيمتين، قمت بإجراء ذلك حتى يشير النشاط إلى مستخدم أو تعليق. لا يمكن أن يكون كليهما.

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