在我的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
这个想法是分别更新买方的余额和卖方的余额。 (卖方增量,买方减量)
答案 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
方法将quantity
和stock_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
方法
我需要去。祝你好运