0

実際、私は複式簿記のためにプルタスの宝石をテストしています。私はアカウントとトランザクションを持っています。トランザクションを記録したい場合は、次の手順があります。

1-取引金額を受け取る2つのアカウントを作成します(例:現金(借方)と引き出し(貸方)。

2-トランザクションを作成し、その金額をdebit_accountとcredit_accountに渡します。これは、ステップ番号1で作成しました。アカ​​ウントのタイプを見つけて、名前を見つけます(transactions_controller.rbを参照)。

models / account.rb

class Account < ActiveRecord::Base

    set_inheritance_column do
        "type" + "_id"
    end

    validates_presence_of :name, :type
    validates_presence_of :name

    has_many :credit_transactions,  :class_name => "Transaction", :foreign_key => "credit_account_id"
    has_many :debit_transactions,  :class_name => "Transaction", :foreign_key => "debit_account_id"
      has_many :transactions
      accepts_nested_attributes_for :transactions 
end

models / transaction.rb

class Transaction < ActiveRecord::Base
  belongs_to :commercial_document, :polymorphic => true
  belongs_to :credit_account, :class_name => "Account"
  belongs_to :debit_account, :class_name => "Account"
  belongs_to :account


  validates_presence_of :credit_account, :debit_account, :amount, :description
  validates_associated :credit_account, :debit_account
end

controller / transactions_controller.rb

  def new 

      @transaction = Transaction.new

      respond_to do |format|
          format.html #new.html.erb
          format.json { render :json => @transaction }
        end
    end 

        def create
        @transaction = Transaction.new(params[:transaction])
        @transaction.credit_account = Account.where(:type => params[:type]).where(:name => params[:name]) 
        @transaction.debit_account =  Account.where(:type => params[:type]).where(:name => params[:name])

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

transaction / _form.html.erb

<%= simple_form_for @transaction do |f| %>

  <%= f.input :description %>
  <%= f.input :debit_account %>
  <%= f.input :credit_account %>
  <%= f.input :amount %>

  <%= f.button :submit %>   

<% end %>

トランザクションを送信すると、次のエラーメッセージが表示されます

ActiveRecord::AssociationTypeMismatch in TransactionsController#create
Account(#2160906760) expected, got String(#2151988680)

私は何が間違っているのですか?

4

1 に答える 1

1

次のコードを置き換えてください。

@transaction.credit_account = Account.where(:type => params[:type]).where(:name => params[:name]) 
@transaction.debit_account =  Account.where(:type => params[:type]).where(:name => params[:name])

@transaction.credit_account = Account.find(:all, :conditions => [:type => params[:type], :name => params[:name]])  
@transaction.debit_account =  Account.find(:all, :conditions => [:type => params[:type], :name => params[:name]])

これがお役に立てば幸いです。

于 2011-12-08T13:21:22.387 に答える