メソッド定義が 'syntax error、unexpected' = '、expecting keyword_thenまたは'; ' "\ n"

2016-07-25 14 views
0

モデルにメソッドを定義しようとしていますが、最後のelsif行では、 "/app/models/purchase.rb:23:構文エラー、予期しない '='、expecting 「)」ELSIF(self.invoices.sum(:current_balance)= 0 ^」私は確かに等号が署名に使用する意味ですかメソッド定義が 'syntax error、unexpected' = '、expecting keyword_thenまたは'; ' " n"

def payment_status 
    if self.invoices.blank? 
     self.payment_status = "No Invoices" 
    else 
     if self.invoices.sum(:current_balance) > 0 
     self.payment_status = "Open" 
     elsif self.invoices.sum(:current_balance) < 0 
     self.payment_status = "Overpaid" 
     elsif self.invoices.sum(:current_balance) = 0 
     self.payment_status = "Paid" 
     end 
    end 
    end 

ので、私、私は問題が何であるかにと迷ってしまいました。任意のアイデア?

+0

をmemoizeするとき、私はあなたがそこに割り当てを行うことを意味not__ __doかなり確信してどのように/上の例について

def payment_status @payment_status ||= begin if invoices.blank? "No Invoices" elsif invoices.sum(:current_balance) > 0 "Open" elsif invoices.sum(:current_balance) < 0 "Overpaid" else "Paid" end end 

。 –

+0

私は訂正しました。今すぐ戻って、定義しようとしているメソッドがなぜ未定義に戻っているのかを理解する必要があります。 – NeyLive

+0

このクラス全体が疑わしいように見えます。データベースプロパティゲッターを忍者トリガーセッターにオーバーライドすると、他にどのような副作用があるのか​​分かりますか?恥ずかしがり屋 –

答えて

1
elsif self.invoices.sum(:current_balance) = 0 
              ^--- 

代入操作だ。あなたは==ある平等のテストを、したい。

+0

それをクリアしていただきありがとうございます。私は平等テスト==そこにメソッド 'payment_status'が定義されていないというメッセージが表示されます。それはまさに私が定義しようとしているように私にとって面白いです。 – NeyLive

1

のコードに説明が続く少しをクリーンアップしてみましょう:

def payment_status 
    if invoices.blank? 
    "No Invoices" 
    elsif invoices.sum(:current_balance) > 0 
    "Open" 
    elsif invoices.sum(:current_balance) < 0 
    "Overpaid" 
    else 
    "Paid" 
    end 
end 
  1. あなたは、同じ名前のローカル変数がある場合を除き、すべての関数呼び出しの前にselfを使用する必要はありません、あなたが必要ですそれらを差別化する。
  2. if文は、条件に基づいて "選択する"値を自動的に返し、関数は自動的に最後の文を返します。
  3. 毎回payment_statusを設定する必要はありません。これは、自動的に(関数の最後の値)

あなたは、一度だけこのコードを実行する変数に値を格納し、関数を複数回使用する場合は、することができますmemoizeこれはと戻り値になります次のコード:click hereまたはhere

+0

おそらく、早戻しをmemoizationブロックから外したでしょうか? –

+0

合意。私は私の応答を編集する –

関連する問題