方法定义得到'语法错误,意外'=',期待关键字_then或';'或'\ n'

时间:2016-07-25 19:14:10

标签: ruby-on-rails

我正在尝试在模型中定义一个方法,在最后一个elsif行上我得到一个语法错误,声明“/app/models/purchase.rb:23:语法错误,意外'=',期待')'elsif (self.invoices.sum(:current_balance)= 0 ^“。

  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

我当然的意思是在那里使用等号,所以我很遗憾问题是什么。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

这是一项任务操作。你想要一个相等的测试,==

答案 1 :(得分: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。它将自动成为返回值(函数的最后一个值)
  4. 如果您只想运行此代码一次,将值存储在变量中,并多次使用该函数,您可以memoize使用以下代码:

    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
    

    有关如何/何时记忆click herehere

    的更多示例