0

我有一个我创建的方法,它基于作为参数传递的整数进行一些计算。当我将该方法添加到我的视图时,它只输出最后一个变量。

预算.rb(模型)

def self.percent_calculate(question)
    reception = question * 0.5
    ceremony = question * 0.03
    clothes = question * 0.1
    flowers = question * 0.1
    entertain = question * 0.1
    photo = question * 0.12
    rings = question * 0.03
    misc = question * 0.02
end

index.html.erb(查看)

<%= Budget.percent_calculate(5000.to_i) %>

这个look的输出是:150.0,这是misc变量的计算。

我想一个接一个地分别输出每个变量。

4

2 回答 2

2

ruby 只返回方法的最后一行,除非您return在方法中间调用。也就是说,您希望将计算分离为不同的方法并一一调用它们。通过一些元编程,这可以通过以下方式实现

CALCULATION_PERCENTAGES = {
  reception: 0.5,
  ceremony: 0.03,
  clothes: 0.1,
  flowers: 0.1,
  entertain: 0.1,
  photo: 0.12,
  rings: 0.03,
  misc: 0.02
}

class << self
  CALCULATION_PERCENTAGES.each do |cp, weight|
    define_method "#{cp}_value" do |question|
      weight * question
    end
  end
end

然后你可以打电话

<%= Budget.reception_value 5000 %>
<%= Budget.ceremony_value 5000 %>
于 2013-03-28T01:38:45.483 回答
1

Ruby 中的每个方法都返回方法中最后一条语句的值,这就是你得到 misc 的原因。

你是说你想输出每个变量。您要么需要单独的方法,要么需要返回某种数组、对象或哈希来压缩您尝试使用的所有数据。例如,这将返回一个哈希:

def self.percent_calculate(question)
{:reception => question * 0.5,
  :ceremony => question * 0.03,
  :clothes => question * 0.1,
  :flowers => question * 0.1,
  :entertain => question * 0.1,
  :photo => question * 0.12,
  :rings => question * 0.03,
  :misc => question * 0.02}
end

然后你可以像访问它

calculations = percent_calculate(question)
calculations[:reception]

获取接收值。

于 2013-03-28T01:39:30.500 回答