我有一个rake任务,它在rails 4.0中工作,但现在我已经升级到4.1,这已经不再适用了。现在我收到一个关于调用shift
的错误undefined method `shift' for #<CallBackRequest::ActiveRecord_AssociationRelation:0x007f9e5b9fb630>
The Rake
instructors.each do |instructor|
print "#{instructor.instructor_name} Call Back Request Report \n"
pupil_leads = instructor.call_back_requests.from_to_bill(2.weeks.ago, 1.week.ago).all
print "Found #{pupil_leads.count} Call Back Requests for period 2 weeks ago until 1 week ago.\n\n"
pupil_leads.group_by { |h| h[:telephone_number] }.values.select { |a| a.size > 1 }
pupil_leads.shift
if pupil_leads.length > 0
print "Found #{pupil_leads.count} duplicate CBRs. Proceeding to mark as non billable and resolved..\n\n\n"
pupil_leads.each do |dpl|
print "updating this pupil lead #{dpl.inspect}"
dpl.update_attributes(:billable => false, :resolved => true)
end
end
end
我的理解是Rails不再允许你在Active Record关系上调用方法,或者Rails在以前的某个时刻没有生成数组,而是保持Active Record关系直到以后。无论哪种方式,您都认为在4.1中有一种方法可以解决这个问题,只需要从.all
方法中选择.select .all .pluck .take
或其他方法来选择记录。我尝试过几件事无济于事。我以为我正在使用数组进行操作,因为我在我的初始.all
行中pupil_leads
。
除此之外:我一个月前问过How to find duplicate records in ActiveRecord other than original one,这就是为什么我使用shift从数组中删除第一个,这样我就可以将所有其他内容标记为重复。
答案 0 :(得分:1)
是的,在Rails中&gt; 4.0即使在关系上调用all
之后,它也不会转换为数组对象。如果你真的需要'纯'数组,你必须手动完成,调用to_a
。