0

パラメータとして渡された整数に基づいて計算を行うメソッドを作成しました。メソッドをビューに追加すると、最後の変数のみが出力されます。

Budget.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) %>

この外観からの出力は次のとおりです。150.0、これは misc 変数の計算です。

各変数を個別に出力したい。

4

2 に答える 2

2

returnruby は、メソッドの途中で呼び出さない限り、メソッドの最後の行のみを返します。そうは言っても、計算を異なるメソッドに分けて、それらを 1 つずつ呼び出したいと思うでしょう。いくつかのメタプログラミングを使用すると、これは次のように実現できます。

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 のすべてのメソッドは、メソッドの最後のステートメントの値を返します。

各変数を出力したいと言っています。個別のメソッドが必要か、使用しようとしているすべてのデータを圧縮するある種の配列、オブジェクト、またはハッシュを返す必要があります。たとえば、これはハッシュを返します。

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