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

あなたはこのようなことをすることができます

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 に答える