尝试更新用户余额时未定义方法错误' - '

时间:2017-10-22 17:57:24

标签: ruby-on-rails

在我的user.rb文件中

has_many :virtual_transactions

def balance
  bought_transactions = VirtualTransaction.where(buyer_id: self.id)
  sold_transactions = VirtualTransaction.where(seller_id: self.id)
  bought_amount = bought_transactions.inject{|sum, t| sum + t.amount}
  sold_amount = sold_transactions.inject{|sum, t| sum + t.amount}
  bought_amount - sold_amount
end

virtual_transaction.rb

belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer_id'
belongs_to :seller, :class_name => 'User', :foreign_key => 'seller_id'

def amount
  quantity.to_f * stock_price.to_f 
end

我试图在不使用balance列的情况下独立更新买方和卖方的余额。但是,我得到了

  

未定义的方法错误' - '用于VirtualTransaction

当我尝试类似的事情时:

User.first.balance

这个想法是分别更新买方的余额和卖方的余额。 (卖方增量,买方减量)

1 个答案:

答案 0 :(得分:0)

如果您想bought_amount - sold_amount,则需要将bought_amount从课程VirtualTransaction转换为integer class bought_amount.to_i

def balance
bought_transactions = VirtualTransaction.where(buyer_id: self.id)
sold_transactions = VirtualTransaction.where(seller_id: self.id)
bought_amount = bought_transactions.inject{|sum, t| sum + t.amount}
sold_amount = sold_transactions.inject{|sum, t| sum + t.amount}
bought_amount.to_i - sold_amount.to_i
end

我仍然不知道你的VirtualTransaction模型是什么样的,但是在尝试进行计算之前你应该把它翻译成整数

更新

@Solias使用def amount方法将quantitystock_price转换为float https://ruby-doc.org/core-2.2.0/Float.html您正在使用{{1}上购买的方法}和sold_amount,因此这两个字段应为bought_amount,并且该类具有float方法。现在你说我这个值是未定义的变量。因此,您的错误正在被触发,因为-没有浮点数据类型所具有的方法undefined variable

因此,在这两行返回未定义的nil变量

时会听到问题
-

您需要找到一种正确计算bought_amount = bought_transactions.inject{|sum, t| sum + t.amount} sold_amount = sold_transactions.inject{|sum, t| sum + t.amount} bought_amount的方法,请记住,浮点数的总和应该是浮点数,因此您可以使用this methods来执行计算

听到的问题是

sold_amount

所以

bought_amount = nil or undefined
sold_amount = nil or undefined

不存在,因为nil类没有- sold_amount 方法

我需要去。祝你好运