代码之家  ›  专栏  ›  技术社区  ›  Satchel

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

  •  0
  • Satchel  · 技术社区  · 15 年前

    这是一个非常混乱的情况,我想知道是不是因为我在“新”的控制器。

    我有一个新的电子邮件记录,其视图如下:

    <% title "New Email" %>
    
    <div id = "form">
      <%= render :partial => 'form' %>
    </div>
    
    <div id = "tabs">
      <h2>Campaign Activity</h2>
      <%= debug @campaign %> 
    
    </div>
    

    电子邮件嵌套在活动Id中创建。

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

    但是,上面的debug@campaign行显示了两个电子邮件记录,第二个记录如下:

    - &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 回复  |  直到 15 年前
        1
  •  0
  •   nathanvda    15 年前

    只是为了确保我理解正确:你的 @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>
    
    推荐文章