0

只是出于好奇:

有没有办法简化这样的文件:

module Converter

  def hourly_rate
    hourly_rate_in_cents.to_d / 100 if hourly_rate_in_cents
  end

  def hourly_rate=(number)
    self.hourly_rate_in_cents = number.to_d * 100 if number.present?
  end

  def price
    price_in_cents.to_d / 100 if price_in_cents
  end

  def price=(number)
    self.price_in_cents = number.to_d * 100 if number.present?
  end  

  def amount
    amount_in_cents.to_d / 100 if amount_in_cents
  end

  def amount=(number)
    self.amount_in_cents = number.to_d * 100 if number.present?
  end

end

我使用这些函数是因为我需要将所有与金钱相关的值存储integers在我的数据库中,但是我不喜欢我的代码中的重复。

4

1 回答 1

1

You could do something like this

module Converter

  def self.def_converter(name)
    define_method(name) do
      value_in_cents = send("#{name}_in_cents")
      value_in_cents.to_d / 100 if value_in_cents.present?
    end

    define_method("#{name}=") do |number|
      send("#{name}_in_cents=", number.to_d * 100) if number.present?
    end
  end

  def_converter(:hourly_rate)
  def_converter(:price)
  def_converter(:amount)

end
于 2013-05-14T14:43:05.123 回答