在我的控制器中我有:
@taletids = Taletid.where(:online => true)
@taletids.each{|taletid| taletid.calculate_total(params[:search])}
@taletids.sort!
在我的模特中,我有:
attr_accessor :total_price
def <=> other
self.total_price <=> other.total_price
end
def total_price
@total_price = self.data
else
@total_price = nil
end
问题是我无法对total_price为nil
的对象进行排序因此,如果nil:
,我想从@taletids数组中删除total_price @taletids = Taletid.where(:online => true)
@taletids.each{|taletid| taletid.calculate_total(params[:search])}
remove all the @Taletids that have total_price of nil
@taletids.sort!
答案 0 :(得分:1)
你可以这样做:
@taletids = @taletids.delete_if {|taletid| taletid.total_price == nil }
编辑:缩短它以使用大括号,因为它是单行。
编辑2:所以它不删除nils,只创建一个没有它们的新数组。
@temptaletids = @taletids.delete_if do |taletid|
taletid.total_price == nil
end
该实现使@temptaletids成为一个没有任何nils的数组,但只留下了@taletids。
答案 1 :(得分:1)
@taletids = @taletids.select{|taletid| taletid.total_price != nil}