0

モデルにisTransferというフィールドがあります。

class AddTxfrColumnsToTransaction < ActiveRecord::Migration
  def change
    add_column :transactions, :isTransfer, :boolean
    add_column :transactions, :transferAccount_id, :integer
  end
 end

アクションのように動作するコントローラーを作成します::new、ただし転送呼び出しの場合のみnew_transfer:

def new_transfer
  account = Account.find(params[:account_id])
  @transaction = account.transactions.build
  @transaction.description = "Transfer"
  @transaction.isTransfer = true
  @transaction.amount = 100

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

ビューフォームに新しい転送が表示されると、投稿する前に、isTransferがtrueに設定されていることがわかります。しかし、私が投稿するとき、それは常にfalseとしてDBに入ります。他のフィールド(説明と金額)は変更されません-期待どおりに入力されます。

モデルは次のとおりです。

class Transaction < ActiveRecord::Base
  attr_accessible :account_id, :amount, :check, :date, :description, :is_cleared, :note, :category, :isTransfer, :transferAccount_id
  validates_presence_of :amount, :date

  belongs_to :account, class_name: 'Account'
  belongs_to :transferAccount, class_name: 'Account'

end
4

2 に答える 2

0

新規ではなく、createcontrollerメソッドでプリセットを実行することをお勧めします

また、「!」を追加することもできます。saveメソッドがコンソールからエラーを返すようにするには、次のようにします。

def create
    ###do your preset methods here
    if(@transaction.save!)

    end
end
于 2012-10-15T11:20:48.560 に答える
0

わかりました、これはおそらく完全な初心者の間違いです。私は当初、(new_transferアクションの一部として)コントローラーに値を設定すると、送信後もcreateアクションに保持されると信じていました。私の間違いは、new_transferフォームでそれをまったく参照しなかったために、パラメーターとしてCreateアクションに戻されなかったことです。new_transferフォームに以下を追加することにより、isTransferはcreateアクションで更新されるようになりました。

<%= f.hidden_field(:isTransfer) %>
于 2012-10-16T01:55:07.840 に答える