así estoy escribiendo un sistema del cual cada usuario tiene una cuenta y deposita. entonces mi modelo de usuario es:
has_many :deposits modelo de cuenta belongs_to :user modelo de depósito belongs_to :user
En mi tarea de rake, estoy tratando de encontrar y verificar cada depósito y, una vez verificado, el equivalente se actualiza en la cuenta.saldo
desc "Depost Verification per plans" task testest2: :environment do @users = User.all @users.each do |u| puts u.email u.accounts.each do |a| puts a.first_name puts a.balance end u.deposits.each do |d| puts d.amount end @accounts = u.accounts.all @deposits = u.deposits.all @accounts.each do |b| puts b.first_name end print "Commands working here error begins on the next paragrah" print "how do i achieve this loop using the above parameters" @accounts.zip(@deposits).each do |account, d| if d.status? acct_bal = account.balance.to_f + d.amount.to_f account.update!(balance: acct_bal) puts account.user.username puts account.balance print "Deposit Added" else acct_bal = account.balance.to_f + 0.00 account.update!(balance: acct_bal) puts account.user.username print "Deposit Unverifed" end end end print "command run .........." endBt de alguna manera estoy recibiendo este error
/Users/fortune/.gem/ruby/2.7.2/gems/json-1.8.6/lib/json/common.rb:155: warning: Using the last argument as keyword parameters is deprecated daveskeen24@gmail.com DayTon 0.0 DayTon Commands working here error begins on the next paragrahrails aborted! NoMethodError: undefined method `status?' for nil:NilClass /Users/fortune/sites/current/dapps/dayton/lib/tasks/deposits.rake:77:in `block (4 levels) in <main>' /Users/fortune/sites/current/dapps/dayton/lib/tasks/deposits.rake:76:in `each' /Users/fortune/sites/current/dapps/dayton/lib/tasks/deposits.rake:76:in `block (3 levels) in <main>'Qué debo hacer.....???????????????????
Probablemente tenga menos @ @accounts @deposits por lo que d es nulo, ese es el comportamiento de zip https://apidock.com/ruby/Array/zip
Si pienso correctamente, lo que necesita es tener un enlace en la base de datos entre depósitos y cuentas, luego obtenga cada cuenta y verifique todos sus depósitos relacionados.