如何获得 Float 和 Nil 的比较以返回有效答案?



我有这样的东西:

    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并相应地进行。

您无法将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

您可以在Max中重载attr_reader以进行priority_levelfirm_size

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

相关内容

  • 没有找到相关文章

最新更新