У меня есть два класса Ad
s и Zone
s, которые оба наследуют от класса Tracked
, который, в свою очередь, содержит несколько Event
s. Идея состоит в том, что Ad
s, а также Zone
s могут быть связаны с различными событиями (например, «Вид», «Щелчок», «Конверсия»). Эти события необходимо отслеживать.Rails модель комплексных ассоциаций наследования
Как бы я мог и моделировать, используя ActiveRecord
? Как выглядит код миграции?
Это то, что я до сих пор:
Событие:
class Event < ActiveRecord :: Base
attribute :event_date
belongs_to :trackable, polymorphic: true
[...]
end
Гусеничный:
class Tracked < ActiveRecord :: Base
self.abstract_class = true
has_many :views, class_name: "Event"
has_many :clicks, class_name: "Event"
has_many :conversions, class_name: "Event"
belongs_to :trackable, polymorphic: true
[...]
end
объявления:
class Ad < Tracked
attribute :size, :content
attr_accessor :width, :height
belongs_to :advertisers
has_and_belongs_to_many :campaigns
[...]
end
кампании:
require 'date'
class Campaign < ActiveRecord :: Base
attribute :name, :target_url,
:expiration_date,:categories,
:billing_type, :budget, :budget_type,
:cp_click, :cp_view, :cp_conversion
belongs_to :advertiser
has_and_belongs_to_many :ads
has_many :zones
[...]
end
Сначала я подумал, что, возможно, захотите использовать through
ассоциацию, но так как она имеет первостепенное значение для меня, чтобы различать эти три события (View, Click, Conversion) Я думаю, что я могу применить этот шаблон. Поэтому я думаю, что мне нужно использовать Polymorphic Associations
.
Обратите внимание, что код, который я вставил, содержит всю необходимую информацию для создания модели, т. Е. Нет атрибутов или ассоциаций, которые я забыл. Также я знаю, как написать код миграции для всех атрибутов/ассоциаций, которые не относятся к проблеме, описанной выше.
Отличная идея! Я действительно забыл, что могу отделить модель данных и логику отслеживания. – Nessuno