我正在尝试在模型中定义一个方法,在最后一个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
我当然的意思是在那里使用等号,所以我很遗憾问题是什么。有什么想法吗?
答案 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
self
,除非有一个具有相同名称的局部变量,您需要区分它们。payment_status
。它将自动成为返回值(函数的最后一个值)如果您只想运行此代码一次,将值存储在变量中,并多次使用该函数,您可以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 here或here
的更多示例