为什么debug只显示两个记录,当控制台只在Rails中显示(正确)一个?

时间:2010-11-29 07:02:35

标签: ruby-on-rails activerecord

这是一个非常令人困惑的情况,我想知道是不是因为我在“新”控制器中。

我是一个新的电子邮件记录,其中包含以下视图:

<% title "New Email" %>

<div id = "form">
  <%= render :partial => 'form' %>
</div>

<div id = "tabs">
  <h2>Campaign Activity</h2>
  <%= debug @campaign %> 

</div>

电子邮件创建嵌套在广告系列ID中。

从控制台,campaign.emails只显示一封电子邮件,这是正确的。

但是,上面的调试@campaign行显示2个电子邮件记录,第二个如下所示:

- &id001 !ruby/object:Email 
  attributes: 
    created_at: 
    title: 
    campaign_id: 1
    updated_at: 
    days: 
    subject: 
    message: 
  attributes_cache: {}

  changed_attributes: 
    campaign_id: 
  errors: !ruby/object:ActiveRecord::Errors 
    base: *id001
    errors: !map:ActiveSupport::OrderedHash {}

我在新视图中,它有一个标准的新控制器:

  def new
    @campaign = Campaign.find(params[:campaign_id])
    @email = @campaign.emails.build
  end

问题:从视图中,如何正确获取广告系列的关联电子邮件以及为什么我会看到“幻影”记录?

1 个答案:

答案 0 :(得分:0)

只是为了确保我理解正确:您的@campaign有一个电子邮件记录,在您的新操作中执行@campaign.emails.build,这会添加一个新的(空)电子邮件,您希望能够迭代除新创建的电子邮件之外的所有电子邮件?

要迭代所有电子邮件而不显示“新”电子邮件,请执行类似

的操作
<div id = "tabs">
  <h2>Campaign Activity</h2>
  <% @campaign.emails.reject {|x| x.new_record?}.sort{|x,y| x <=> y}.each do |email| %>
      ... show the data of the email here ...
  <% end %>
</div>