0

これを行う方法を理解しようとして途方もなく苦労しています。私は文字通り一日中それに取り組んできました。

Account クラスと Transaction クラスがあります。アカウントは残高で作成され、そのタイプに応じて、トランザクション金額を残高に加算または減算する必要があります。

トランザクションが作成されるたびにアカウントの残高を更新できるようにしたいと考えています。これは、個人金融アプリケーション用です。今のところ、新しいトランザクションを作成しても、アカウントの残高には何も起こりません。

accounts_controller.rb

class AccountsController < ApplicationController
  def index
    @accounts = Account.all
  end

  def show
    @account = Account.find(params[:id])
  end

  def new
    @account = Account.new
  end

  def edit
    @account = Account.find(params[:id])
  end

  def create
    @account = Account.new(params[:account])

    respond_to do |format|
      if @account.save
        format.html { redirect_to @account, notice: 'Account was successfully created.' }
        format.json { render json: @account, status: :created, location: @account }
      else
        format.html { render action: "new" }
        format.json { render json: @account.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    @account = Account.find(params[:id])

    respond_to do |format|
      if @account.update_attributes(params[:account])
        format.html { redirect_to @account, notice: 'Account was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @account.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /accounts/1
  # DELETE /accounts/1.json
  def destroy
  @account = Account.find(params[:id])
  @account.destroy

  respond_to do |format|
    format.html { redirect_to accounts_url }
    format.json { head :no_content }
  end
  end

  def update_balance
  @a = Account.find(params[:id])
  @a.transactions.each do |t| 
    @update_balance = t.t_type + @a.balance
    @a.update_attributes(:balance => @update_balance)
  end
  end
end

transactions_controller.rb

class TransactionsController < ApplicationController
  def create
    @account = Account.find(params[:account_id])
    @transaction = @account.transactions.create(params[:transaction])
    redirect_to account_path(@account)
  end
end

トランザクション.rb

class Transaction < ActiveRecord::Base
  belongs_to :account
  attr_accessible :amount, :category, :t_type
end

account.rb

class Account < ActiveRecord::Base
  attr_accessible :balance, :name
  has_many :transactions
end

誰かが私が間違っていることを知っているか、完全な説明の方向に私を向けることができれば、それは素晴らしいことです. この時点で私はとても迷っています。

4

2 に答える 2

0

指示していないため、更新されません。after_createそのためのコールバックを作成します。

class Transaction < ActiveRecord::Base
  # ...
  after_create :update_account_balance

  private

  def update_account_balance
    account.balance += amount
    account.save
  end
end

必要に応じて調整します。これは、読者の演習として残されているトランザクションの金額の更新を処理しないことに注意してください。

于 2013-02-10T02:47:35.730 に答える
0

これを試して。

class Account < ActiveRecord::Base
  attr_accessible :balance, :name
  has_many :transactions

  def update_with_transaction(transaction)
    return unless self.transactions.include? transaction
    if transaction.t_type.eql? SOME_TYPE
      self.balance += transaction.ammount
    else 
      self.balance -= transaction.ammount
    end
    save
  end
end

class TransactionsController < ApplicationController
  def create
    account = Account.find(params[:account_id])
    @transaction = account.transactions.create(params[:transaction])
    account.update_with_transaction(@transaction)
    redirect_to account_path(account)
  end
end
于 2013-02-10T02:45:11.160 に答える