【问题标题】:Different Way to Render Same Results of Associated Records呈现关联记录的相同结果的不同方式
【发布时间】:2014-08-20 04:40:05
【问题描述】:

我有 3 个模型:广告系列、周数和广告素材

一个广告系列可以有很多周,而几周可以有很多创意。

活动模型

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

基本上,只显示属于该特定周的广告素材。

我正在尝试创建自定义画廊等,并且需要将此代码本地化为具有它的部分诗句

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

【问题讨论】:

    标签: ruby-on-rails scope associations unique


    【解决方案1】:

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

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

    【讨论】:

    • 对不起。唯一的调用不起作用。我之前尝试过,但没有成功。
    【解决方案2】:

    是的。通过在您的广告系列模型中使用直通关联:

    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 %>
    

    【讨论】:

    • 我应该更清楚。竞选活动有很多周。每周可以有多个广告素材。广告系列确实与广告素材有关联,我可以毫无问题地像这样展示它,但等式还有更多。只有某些人应该根据他们是否是周所有者来查看这些图像。这就是为什么在相关周内过滤广告素材对我来说很重要
    • 换句话说“我还没有在我的问题中包含所有相关代码”......请解决这个问题,然后我们可以真正帮助你:)(不要在cmets...编辑您的问题并在那里添加代码...)
    • 对...不幸的是,您还没有解释如何检查用户的周数...但无论如何我已经尝试了解决方案
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多