我有三种模式:运动,周和创意
一场运动可以有很多周,也可以有很多创意人员。
运动模型
has_many :weeks, dependent: :destroy
accepts_nested_attributes_for :weeks, :allow_destroy => :true
validates_associated :weeks
has_many :creatives, dependent: :destroy
accepts_nested_attributes_for :creatives, :allow_destroy => :true周模型
belongs_to :campaign
has_many :creative_weeks
has_many :creatives, :through => :creative_weeks创意模型
belongs_to :campaign
has_many :creative_weeks
has_many :weeks, :through => :creative_weeks在竞选活动中,我有:
<% @campaign.weeks.each do |week| %>
<%= render week.creatives %>
<% end %>由此产生的日志是:
Creative Load (0.3ms) SELECT `creatives`.* FROM `creatives` INNER JOIN `creative_weeks` ON `creatives`.`id` = `creative_weeks`.`creative_id` WHERE `creative_weeks`.`week_id` = 6基本上,只展示属于那一周的创意人员。
我正在尝试创建自定义库等,并需要将这些代码本地转换为一个部分,使其具有<%=呈现week.creatives %>。
根据所提供的日志,是否有一种方法可以让我使用“包含”、“连接”等实现相同的过滤结果?
发布于 2014-08-20 04:54:27
是。通过在您的竞选模式中使用“通过关联”:
class Campaign < ActiveRecord::Base
has_many :weeks
has_many :creatives, through: :weeks
end现在你可以用:
<% @campaign.creatives.each do |creative| %>
<%= image_tag(...) %>
<% end %>如果你需要展示/隐藏一个创意属于的每周.你仍然可以像这样检查一周:
<% @campaign.creatives.each do |creative| %>
<%= image_tag(...) if user.can_see_week?(creative.week) %>
<% end %>(或任何您使用的周检查方法)
或者,如果你真的想在几周内观察创意人员,那就对创意人员进行一周的观察:
<% @campaign.creatives.where(week: user.allowed_weeks).each do |creative| %>
<%= image_tag(...) %>
<% end %>发布于 2014-08-20 05:05:31
如果以这种方式看到副本,可以通过以下方式将uniq添加到has_many中。
has_many :weeks
has_many :creatives, -> { uniq }, through: :weekshttps://stackoverflow.com/questions/25396825
复制相似问题