是否可以在Rails模型中定义需要不同初始化的两个方法?

时间:2013-07-31 11:59:05

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

您好我正在尝试在Rails中创建一个可以执行两次计算的模型。这是我的代码:

class Calculator
  def initialize(nair, cppy, interest_rate, payment, periods)
    @nair = nair.to_f / 100
    @cppy = cppy.to_f

    @interest_rate = interest_rate
    @payment = payment
    @periods = periods      
  end

  def effective
    Refinance::Annuities.effective_interest_rate(@nair, @cppy)          
  end

  def principal
    Refinance::Annuities.principal(@interest_rate, @payment, @periods)
  end
end

我有两种形式存在于不同的视图中,这些视图接收来自用户的输入,包括'nair'和'cppy',另一个是'interest_rate','payment'和'periods'。

我遇到的问题是要使用这个模型,所有五个参数都需要可用。

每次计算需要单独的模型吗?

如果有一个非常明显的答案,我会完全开始抱歉。

谢谢!

1 个答案:

答案 0 :(得分:0)

可能有十几种不同的方法可以解决这个问题,但一种可能的方法是在初始化方法中使用默认参数。

class Calculator
  def initialize(nair=0, cppy=0, interest_rate=0, payment=0, periods=0)
    @nair = nair.to_f / 100
    @cppy = cppy.to_f

    @interest_rate = interest_rate
    @payment = payment
    @periods = periods      
  end

  def effective
    Refinance::Annuities.effective_interest_rate(@nair, @cppy)          
  end

  def principal
    Refinance::Annuities.principal(@interest_rate, @payment, @periods)
  end
end

另一种可能的解决方案是使它们成为类方法而不是处理实例或状态:

class Calculator
  def self.effective(nair, cppy)
    nair = nair.to_f / 100
    cppy = cppy.to_f

    Refinance::Annuities.effective_interest_rate(nair, cppy)
  end

  def self.principal(interest_rate, payment, periods)
    Refinance::Annuities.principal(interest_rate, payment, periods)
  end
end

Calculator.effective(x, y)
Calculator.principal(x, y, z)