我遇到方法定义问题。我在我的"购买"模型:
def update_amount newamount
self.total_amount = self.total_amount +newamount
end
并在其他地方使用此代码:
buy.update_amount(amount)
如果我运行程序,我会收到此错误:
ArgumentError (wrong number of arguments (1 for 0)):
app/models/buy.rb:18:in `update_amount'
现在,如果我换了这个(只是为了尝试):
buy.update_amount
我收到此错误:
ArgumentError (wrong number of arguments (0 for 1)):
app/models/buy.rb:18:in `update_amount'
我是Ruby on Rails的新手,所以它可能很简单。
答案 0 :(得分:13)
你有相当棘手的错误!这一行:
self.total_amount = self.total_amount +newamount
由Ruby解释为:
self.total_amount = self.total_amount(+newamount)
因此你得到了ArgumentError
。
Ruby lexer错误+newamount
表示参数(即一元加上后跟newamount
标识符),因为它知道total_amount
是方法调用,而{{1}后面没有空格。将该行写为:
+
将解决问题。或者更好的是,使用self.total_amount = self.total_amount + newamount
简写为@backpackerhh建议。
答案 1 :(得分:6)
def update_amount(newamount)
self.total_amount += newamount
end
这会将新金额添加到total_amount
属性的当前值。
您试图将newamount
作为参数传递给self.total_amount
属性。