【发布时间】:2014-09-26 00:29:07
【问题描述】:
我正在尝试构建多层次模型,如图所示。当用户创建活动时,他们将从表 Category 和 Metro 中选择一些类别和一些 Metro。然后,这些选择将被放置在两个表中,分别是 campaign_category 和campaign_metro。但是在创建这些条目后,我希望在另一个表中填充表campaign_category_metro 中这些组合的排列,以允许链接活动、为用户选择的类别和都市圈以设置出价。
更新:
例如,假设用户创建了一个 ID 为 10 的活动,并选择了 ID 为 1 和 2 的类别,以及 ID 为 3 和 4 的 Metros。在表格中会出现 Campaign_category:
并在表中显示campaign_metro:
在 campagin_category_metro 中,我希望将上表中的那些置换行设为:
然后用户可以对这些广告系列/地铁组合设置出价。
截至目前,在创建广告系列并选择类别和都市圈时,我可以填充表格campaign_category 和campaign_metro,但最终表格campaign_category_metro 仍为空白。以下是我的模型:
第一级:
class Campaign < ActiveRecord::Base
has_many :campaign_metros, dependent: :destroy
has_many :metros, through: :campaign_metros
has_many :campaign_categories, dependent: :destroy
has_many :categories, through: :campaign_categories
end
class Category < ActiveRecord::Base
has_many :campaign_categories, dependent: :destroy
has_many :campaigns, through: :campaign_categories
end
class Metro < ActiveRecord::Base
has_many :campaign_metros, dependent: :destroy
has_many :campaigns, through: :campaign_metros
end
二级(填充,但与campaign_category_metro 的关系不执行任何操作):
class CampaignCategory < ActiveRecord::Base
belongs_to :campaign
belongs_to :category
has_many :campaign_category_metros, dependent: :destroy
has_many :campaign_metros, through: :campaign_category_metros
end
class CampaignMetro < ActiveRecord::Base
belongs_to :campaign
belongs_to :metro
has_many :campaign_category_metros, dependent: :destroy
has_many :campaign_categories, through: :campaign_category_metros
end
第三级(创建活动时没有任何显示):
class CampaignCategoryMetro < ActiveRecord::Base
belongs_to :campaign_category
belongs_to :campaign_metro
end
如何允许在创建广告系列时使用所选类别和都市圈的总排列填充第三级表?
【问题讨论】:
-
您想用 CampaignCategoryMetro 解决什么问题?即使填充,其中的信息也是多余的。
-
是的,为什么你加入模型需要记录才能知道其他模型是什么?你可以问它的父母。
-
我更新了表格campaign_category_metro 来说明原因。类别和地铁的每个选择,这些分组的组合将有自己的用户稍后设置的各自的投标价格
-
@diego.greyrobot 是否可以添加任何内容,以便在创建活动并选择类别和都市时填充表campaign_category_metro?
-
campaign_category_metro 表的用途是什么?你的问题不清楚。我对您的架构感到困惑。您是否正在尝试获取已为创建的每个广告系列选择的对 Metro 和类别的组合?
标签: ruby-on-rails activerecord database-design