Rails:4.2
Ruby:2.2.3
我在模型中使用表现,其类别为:Performance :: ActiveRecord_Associations_CollectionProxy
在从Rails 2升级到Rails 4之前,此方法有效:
def remove_expired_performances
performances.reject! {|performance| performance.date < Date.today}
end
现在,我收到了拒绝的错误!是ActiveRecord_Associations_CollectionProxy的无效方法。这是有道理的,因为此处未列出拒绝:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html
Rails 4中最干净的方法是什么,我可以获得相同的结果(从集合中删除比现在更早的日期的记录)?
注意:我需要将对象保持为ActiveRecord_Associations_CollectionProxy并命名为 performance 。
答案 0 :(得分:1)
我假设您的模型has_many :performances
class Orchestra < ActiveRecord::Base
has_many :performances
end
我认为最简单的解决方案是将performances
转换为数组并拒绝已过期的数据。
# class Orchestra
def remove_expired_performances
performances.to_a.reject {|performance| performance.date < Date.today}
end
更有效的解决方案可能是首先避免将过期的Performance从数据库中拉出来。
# in wherever your finder code lives
@performances = Orchestra.find(params[:id]).performances.where('date >= ?', Date.today)