2011-11-10 10 views
0

レール3 appisはcreate!メソッドをコントローラの作成内に作成します。作成する!メソッド内のコントローラの作成メソッド

時々動作し、時にはそうではありません。常に同じユースケースで一貫して失敗しますが、私はチェックして再チェックして、なぜ失敗するのか理解できません。

作成!メソッドが黙って失敗すると、問題のログには何も表示されません。どのように私は作成することができます!もっと冗長にする方法?

コード:

class NotificationPaiementsController < ApplicationController 
    protect_from_forgery :except =>[:create] 
    skip_before_filter :authorize, :only => [:create] 

    def create 
    logger.debug "params is #{params}" 
    logger.debug "invoice is #{params[:invoice]}" 
    logger.debug "payment_status is #{params[:payment_status]}" 

    logger.debug "txn_id is #{params[:txn_id]}" 

    @notification_paiement = NotificationPaiement.create!(:params => params, 
               :cart_id => params[:invoice], 
               :status=> params[:payment_status], 
               :transaction_id => params[:txn_id]) 

    logger.debug "notification_paiement is #{@notification_paiement}" 
    render :nothing=>true 
    end 
end 

EDIT:あなたの答えのための Thxを、例外をキャッチするために高速化されているだろうが、私は、新しいコンソールsaveviaを使用して問題を識別するために管理しました。保存時にUTF-8エンコーディングに関するエラーが発生しました。ArgumentError:UTF-8で無効なバイトシーケンスです。 "moli \ xE8re"の "molière"をPaypalが変更していて、エラーが表示されませんでした。

+0

あなたが 'あなたを貼り付けることができますNotificationPaiement'モデルと、 'NotificationPaiementsController#create'の呼び出し例を参照してください。 – fuzzyalej

答えて

1

それが失敗した場合にcreate! constructorが例外を発生させます:

だから、

Creates an object just like Base.create but calls save! instead of save so an exception is raised if the record is invalid.

、あなたがcreate!を使用するつもりなら、あなたは例外処理でそれをラップする必要があります。

begin 
    @notification_paiement = NotificationPaiement.create!(... 
rescue ActiveRecord::RecordInvalid => e 
    # Deal with your errors. 
end 
1

例外情報が飲み込まれている場合は、config/initializers/backtrace_silencers.rbでバックトレースサイレンサーを一時的に削除することができます。

関連する問題