Ruby on rails 呈现关联记录的相同结果的不同方法

Ruby on rails 呈现关联记录的相同结果的不同方法,ruby-on-rails,scope,associations,unique,Ruby On Rails,Scope,Associations,Unique,我有3个模型:活动、周和创意 一个活动可以有很多周,而周可以有很多创意 战役模式 周模型 创新模式 在活动视图中,我有: <% @campaign.weeks.each do |week| %> <%= render week.creatives %> <% end %> 基本上,只显示属于该周的创意 我正在尝试创建自定义库等,并需要将此代码本地转换为部分代码 根据提供的日志,我是否有办法使用“包含”、“加入”等实现相同的筛选结果?是。

我有3个模型:活动、周和创意

一个活动可以有很多周,而周可以有很多创意

战役模式

周模型

创新模式

在活动视图中,我有:

   <% @campaign.weeks.each do |week| %>
     <%= render week.creatives %>
   <% end %>
基本上,只显示属于该周的创意

我正在尝试创建自定义库等,并需要将此代码本地转换为部分代码


根据提供的日志,我是否有办法使用“包含”、“加入”等实现相同的筛选结果?

是。通过在您的活动模型上使用关联:

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 %>
或者你使用的任何每周检查方法

或者,如果您真的想按周对creatives进行范围界定,那么请在creatives上设定一周范围:

<% @campaign.creatives.where(week: user.allowed_weeks).each do |creative| %>
   <%= image_tag(...) %>
<% end %>

如果您以这种方式看到重复项,您可以将uniq添加到has_many-through

has_many :weeks
has_many :creatives, -> { uniq }, through: :weeks

我应该说得更清楚些。竞选活动有好几周的时间。每周可以有多个创意。竞选活动确实与创造力有关,我可以这样毫无问题地表现出来,但等式中还有更多的东西。只有特定的人才能根据他们是否是周主来观看这些图片。这就是为什么对我来说,重要的是通过相关的weekIn过滤创意,换句话说,我还没有在我的问题中包括所有相关的代码。。。请解决这个问题,然后我们才能真正帮助你:不要在评论中向我描述它。。。编辑你的问题并在那里添加代码…对。。。不幸的是,您没有解释如何检查用户的周数。。。但我已经尝试了一个解决方案对不起。唯一的呼叫不起作用。我早些时候试过,但没有成功。
<% @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 %>
has_many :weeks
has_many :creatives, -> { uniq }, through: :weeks