2017-10-22 9 views
0

In meiner user.rb Dateinicht definierte Methode Fehler ‚-‘ bei dem Versuch, Benutzer Balance

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 

in meinem 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 

ich zu aktualisieren versuche einen Käufer und Verkäufer Balance ohne die Verwendung unabhängig zu aktualisieren einer balance Spalte. Allerdings bekomme ich

nicht definierte Methode Fehler '-' für VirtualTransaction

, wenn ich etwas versuchen, wie:

User.first.balance 

Die Idee ist separat Käufers Balance und des Verkäufers Balance zu aktualisieren. (Schrittweite für den Verkäufer, ein Abnahme für Käufer)

+0

Sie haben keine 'gekauften_Transaktionen', also keine' gekauften_Zahl '. –

Antwort

0

wenn Sie tun möchten bought_amount - sold_amount Sie die bought_amount aus der Klasse VirtualTransaction zum integer class mit so etwas wie 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 

konvertieren müssen noch ich habe keine Ahnung, von dem, was Ihr VirtualTransaction Modell aussieht, aber man sollte es auf ganzzahlige übersetzen, bevor Sie versuchen diese Berechnung zu tun


UPDATE

@Solias mit dem def amount Methode konvertieren Sie Ihre quantity und stock_price zu floathttps://ruby-doc.org/core-2.2.0/Float.html Sie verwenden diese Methode die gekauft auf sold_amount und bought_amount, so dass diese beiden Felder float sein sollte und dass Klasse hat die - Methode. Jetzt sagst du mir, dass diese Werte undefinierte Variablen sind. Ihr Fehler wird also ausgelöst, da undefined variable die Methode - nicht über einen Float-Datentyp verfügt.

Das Problem ist also in diesen beiden Zeilen hören, die eine nicht definierte Null variable Rück

bought_amount = bought_transactions.inject{|sum, t| sum + t.amount} 
sold_amount = sold_transactions.inject{|sum, t| sum + t.amount} 

Sie müssen einen Weg finden, um richtig bought_amount und sold_amount zu berechnen, denken Sie daran, dass eine Summe von Float-Zahl ist zu ein Schwimmer, so können Sie this methods die Berechnungen ist

Das Problem hören zu tun verwenden, dass

bought_amount = nil or undefined 
sold_amount = nil or undefined 

so

- sold_amount 

nicht existiert, weil die Null-Klasse nicht - Methode hat

ich gehen müssen. Viel Glück

+0

In meiner virtual_transaction ist nichts.rb-Datei außer der Betragsmethode, einigen Validierungen und der Zuordnung. wenn ich 'gekaufte_anzahl.to_i - verkaufte_menge.to_i versuche, bekomme ich eine" to_i "Methode undefiniert. – Solias

+0

@Solias Was ist der 'Datentyp' von' gekaufter_Quote'? –

+0

Ich habe keinen Datentyp angegeben. – Solias

Verwandte Themen