如何简化我的Rails货币转换器模块?

时间:2013-05-14 14:21:52

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

出于好奇:

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

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,但我不喜欢我的代码中的重复。

1 个答案:

答案 0 :(得分:1)

你可以做这样的事情

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