我有这样的事情:
good_attrs = %w(firm_size priority_level)
good_attrs.each do |attr|
if (score.send(attr) > max.send(attr))
max.send("#{attr}=", score.send(attr))
end
end
但是,有时候会发现Max
记录看起来像这样:
#<Max:0x007fe01024b240> {
:id => 2,
:user_id => 1,
:firm_size => 101.0,
:priority_level => nil,
:created_at => Fri, 23 Nov 2012 01:55:53 UTC +00:00,
:updated_at => Fri, 23 Nov 2012 01:58:16 UTC +00:00
}
即。 max.priority_level
= nil
。
那么如何修改我的初始if statement
来处理评估双方的nil
个案件?即,如果score
或max
属性为零。理想情况下,我希望将其视为0
并相应地进行处理。
答案 0 :(得分:3)
您无法将nil
与Float
进行比较。
在您的情况下,您可以利用nil.to_f == 0.0
:
good_attrs = %w(firm_size priority_level)
good_attrs.each do |attr|
if score.send(attr).to_f > max.send(attr).to_f
max.send("#{attr}=", score.send(attr))
end
end
答案 1 :(得分:0)
您可以在priority_level
firm_size
和Max
的attr_reader
def priority_level
read_attribute(:priority_level).nil? ? 0 : super
end
您也可以在after_initialize
块
after_initialize do
self.priority_level = 0 if self.priority_level.nil?
end