在控制器中创建操作后,我想与update_balance(transaction)
参数一起调用transaction
。 “ update_balance(transaction)”在模型中。代码如下:
交易控制器:
class TransactionsController < ApplicationController
before_action :authenticate_user!
def new
@transaction = Transaction.new
end
def create
@transaction = Transaction.new(transaction_params)
@transaction.account = current_account
redirect_to root_path
end
private
def transaction_params
params.require(:transaction).permit(:amount, :transaction_type)
end
end
模型中的代码如下:
Transaction Model.rb
class Transaction < ApplicationRecord
after_create :update_balance
def update_balance(transaction)
@transaction = transaction
if transaction.transaction_type == 'debit'
deposit_balance
else
credit_balance
end
end
def deposit_balance
balance = @transaction.account.current_balance-= @transaction.amount
if balance.positive?
save_transaction
end
end
def credit_balance
@transaction.account.current_balance += @transaction.amount
save_transaction
end
private
def save_transaction
@transaction.account.save
@transaction.save
end
end
此代码将引发错误,因为:wrong number of arguments (given 0, expected 1)
>因此,在创建后操作中也添加了transaction
参数。但这是行不通的。该怎么做?
谢谢。
答案 0 :(得分:0)
问题出在您的控制器中
def create
@transaction = Transaction.new(transaction_params)
@transaction.account = current_account
redirect_to root_path
end
您正在初始化一个新的Transaction
对象,但从未保存!您需要调用@transaction.save
才能创建它,然后回调将按预期方式触发。
如果满足您的需要,也可以使用Transaction.create
代替Transaction.new
,但是使用::new
则save
也很好。
第二个问题:您正在将after_create :update_balance
放入Account
模型中,这意味着它将在创建帐户而不是交易时触发!
尝试将其移至正确的模型。