1

製品が製品コントローラーに保存されたら、トランザクションログを作成しようとしています。何らかの理由で、トランザクションログを保存しようとするとエラーが発生します。製品は正常に保存されています。

コード:

def create 
  @product = Product.new(params[:product])                                                                                                      

  respond_to do |format|                                                                                                                        
  if @product.save
    ProductTransaction.create(
      :product_id => @product.id,                                                                                                             
      :user_id => current_user.id,                                                                                                            
      :message => "Product created"                                                                                                           
    )                                                                                                                                         

    format.html { 
      redirect_to product_path(@product.id), 
      :flash => { :success => "Product was successfully created." } 
    }                      
    else
      format.html { render action: "new" }                                                                                                      
    end                                                                                                                                         
  end                                                                                                                                           
end              

エラー:

PGError: ERROR:  column "product_id" is of type integer but expression is of type character varying at character 117
HINT:  You will need to rewrite or cast the expression.
: INSERT INTO "product_transactions" ("created_at", "message", "product_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id"

上記のエラーがわかりません。テーブルを再確認しましたが、product_idは整数です。また、数値をハードコーディングして、保存できるかどうかを確認しました。それはうまくいきませんでした。次に、create関数からすべてのパラメーターを削除しましたが、それでも同じエラーが発生しました。テーブルを最初から再作成しても同じ結果になりました。ProductTransactionには検証要件はありません。私は何が間違っているのですか?

コード(削除されたパラメーター):

def create 
  @product = Product.new(params[:product])                                                                                                      

  respond_to do |format|                                                                                                                        
  if @product.save
    ProductTransaction.create()                                                                                                                                                                                     

    format.html { 
      redirect_to product_path(@product.id), 
      :flash => { :success => "Product was successfully created." } 
    }                      
    else
      format.html { render action: "new" }                                                                                                      
    end                                                                                                                                         
  end                                                                                                                                           
end              

製品スキーマ:

Product(id:integer, name:string, etc.)

製品トランザクションスキーマ:

ProductTransaction(id:integer, user_id:integer, product_id:integer, message:integer)
4

1 に答える 1

4

私の問題を見つけました。なんらかの理由でアプリを更新する必要がありました。

以下を実行し、それは機能しました:

touch tmp/restart.txt

今、私が私の人生のそれらの2時間を取り戻すことができたなら。:-)

于 2013-03-06T20:06:49.707 に答える