3

在 Ruby on Rails 中,有没有更好的方法来编写:

qty = 2
avg_price = room["price"].to_f if room["price"].present?
total_price = (avg_price * qty) if avg_price.present?

尤其是2号线和3号线。我发现自己经常使用 if-else 条件。谢谢。

4

4 回答 4

0

也许是一种更面向对象的方法?这种方法使测试代码更容易,并且可能是可重用的。

class PriceCalculator

  def init(quantity, price)
    @quantity = quantity
    @price    = price.presence && price.to_f
  end

  def total
    @price * @quantity  if @price
  end

end

total_price = PriceCalculator.new(2, room["price"]).total
于 2013-11-15T10:42:40.027 回答
0

你可以尝试这样的事情:

qty = 2
total_price = room.fetch("price").to_f * qty

但是这段代码有个问题,如果pricehash中没有字段,就会抛出异常。是否满足您的需求?

于 2013-11-15T08:15:48.693 回答
0

如何定义一个帮助方法,以便您可以直接从哈希中提取浮点数:

class Hash
  def get_f key; fetch(key).to_f if key?(key) end # Or `if self[key].present?`
end

然后做:

qty = 2
avg_price = room.get_f("price")
total_price = avg_price * qty if avg_price
于 2013-11-15T08:41:09.663 回答
0

很难缩短这个时间,我会这样做:

qty, avg_price, total_price = 2, nil, nil

if room["price"]
  avg_price   = Float(room["price"])
  total_price = avg_price * qty
end
于 2013-11-15T08:39:03.953 回答