这是一个非常混乱的情况,我想知道是不是因为我在“新”的控制器。
我有一个新的电子邮件记录,其视图如下:
<% 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
问:从这个角度来看,我如何才能正确地获取竞选活动的相关电子邮件,为什么我会看到“幻影”记录?
只是为了确保我理解正确:你的 @campaign 有一个电子邮件记录,在您执行的新操作中 @campaign.emails.build ,这将添加一个新的(空的)电子邮件,并且您希望能够遍历除新创建的电子邮件之外的所有电子邮件?
@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>