首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >呈现相同关联记录结果的不同方法

呈现相同关联记录结果的不同方法
EN

Stack Overflow用户
提问于 2014-08-20 04:40:05
回答 2查看 28关注 0票数 0

我有三种模式:运动,周和创意

一场运动可以有很多周,也可以有很多创意人员。

运动模型

代码语言:javascript
复制
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

周模型

代码语言:javascript
复制
belongs_to :campaign


has_many :creative_weeks
has_many :creatives, :through => :creative_weeks

创意模型

代码语言:javascript
复制
belongs_to :campaign

has_many :creative_weeks
has_many :weeks, :through => :creative_weeks

在竞选活动中,我有:

代码语言:javascript
复制
   <% @campaign.weeks.each do |week| %>
     <%= render week.creatives %>
   <% end %>

由此产生的日志是:

代码语言:javascript
复制
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 %>。

根据所提供的日志,是否有一种方法可以让我使用“包含”、“连接”等实现相同的过滤结果?

EN

回答 2

Stack Overflow用户

发布于 2014-08-20 04:54:27

是。通过在您的竞选模式中使用“通过关联”:

代码语言:javascript
复制
class Campaign < ActiveRecord::Base
   has_many :weeks
   has_many :creatives, through: :weeks
end

现在你可以用:

代码语言:javascript
复制
<% @campaign.creatives.each do |creative| %>
   <%= image_tag(...) %>
<% end %>

如果你需要展示/隐藏一个创意属于的每周.你仍然可以像这样检查一周:

代码语言:javascript
复制
<% @campaign.creatives.each do |creative| %>
   <%= image_tag(...) if user.can_see_week?(creative.week) %>
<% end %>

(或任何您使用的周检查方法)

或者,如果你真的想在几周内观察创意人员,那就对创意人员进行一周的观察:

代码语言:javascript
复制
<% @campaign.creatives.where(week: user.allowed_weeks).each do |creative| %>
   <%= image_tag(...) %>
<% end %>
票数 0
EN

Stack Overflow用户

发布于 2014-08-20 05:05:31

如果以这种方式看到副本,可以通过以下方式将uniq添加到has_many中。

代码语言:javascript
复制
has_many :weeks
has_many :creatives, -> { uniq }, through: :weeks
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25396825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档