如何比较Float&无回复有效答案?

时间:2012-11-26 22:06:50

标签: ruby-on-rails ruby ruby-on-rails-3

我有这样的事情:

    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个案件?即,如果scoremax属性为零。理想情况下,我希望将其视为0并相应地进行处理。

2 个答案:

答案 0 :(得分:3)

您无法将nilFloat进行比较。

在您的情况下,您可以利用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_sizeMax的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