2010-11-29 63 views
0

這是一個非常混亂的情況,我想知道是否因爲我在「新」控制器。爲什麼調試顯示兩條記錄,當控制檯只顯示(正確)在Rails中的一個?

我一個新的電子郵件記錄有以下幾種觀點:

<% title "New Email" %> 

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

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

</div> 

電子郵件創建嵌套在一個廣告活動ID。

從控制檯,campaign.emails只顯示1個電子郵件,這是正確的。

但是,上面顯示的調試@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 

問題:從視圖中,我怎樣才能正確抓取廣告系列的相關電子郵件,以及爲什麼會看到「幻影」記錄?

+0

是的,那是因爲你調用@ campaign.emails.build - 那就是你的「幻影」的紀錄。爲了更容易/有效地遍歷它們,請在調用構建之前將電子郵件分配給控制器中的實例變量。即@emails = @ campaign.emails,然後在@emails視圖循環中。 – jenjenut233 2010-11-30 01:17:24

+0

我看到了......我應該在視圖中添加一個@ campaign.emails.sort,以便在做出<=> b比較 – Angela 2010-12-01 04:13:11

回答

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> 
相關問題