将rails升级到4.1后,Shift不起作用。试图从数组中删除第一个项目。不再使用数组来使用shift

时间:2014-12-01 13:29:51

标签: mysql ruby-on-rails ruby activerecord

我有一个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从数组中删除第一个,这样我就可以将所有其他内容标记为重复。

1 个答案:

答案 0 :(得分:1)

是的,在Rails中&gt; 4.0即使在关系上调用all之后,它也不会转换为数组对象。如果你真的需要'纯'数组,你必须手动完成,调用to_a