0

Rails3.2を使用してActiveMerchantを自分のWebサイトに統合しようとしています。現在、ActiveMerchantの「有効な」関数を使用してクレジットカードの一般的な検証を行うコードがあります。この関数は、カードが無効な場合にエラーメッセージを返します。エラーがある場合は、それらをエラーに追加し、ビューを再レンダリングして、エラーのあるビューを表示したいと思います。以下は私のコントローラーのコードです。

まずクレジットカードを作成します

def credit_card
    first_name = User.find(user_id).first_name
    last_name = User.find(user_id).last_name
    @credit_card ||= ActiveMerchant::Billing::CreditCard.new(
      :brand              => card_type,
      :number             => card_number,
      :verification_value => card_verification,
      :month              => card_expiration.month,
      :year               => card_expiration.year,
      :first_name         => first_name,
      :last_name          => last_name
    )
  end

次に、カードを検証し、ビューの基本エラーに返されたエラーを追加しようとします

# Active Merchant Credit Card validation

def validate_card
    unless credit_card.valid?
      credit_card.errors.full_messages.each do |message|
       errors[:base] << message
      end
    end
end

最後に、作成時にvalid_cardを呼び出します

validate :validate_card, :on => :create

ただし、以下のエラーが発生します

Orders#createのNoMethodError

行#18が発生したapp / views /orders / _form.html.erbを表示しています:

nil:NilClassの未定義のメソッド `map'抽出されたソース(行の周り

18):

15:16:17:<%= f.label:print_dimension%>
18:<%= f.collection_select:print_dimension_id、@print_dimensions、:id、:dimension%> 19:20:21:<%= f.label: delivery_option_id%>

何か提案があれば教えてください。ありがとうございました

4

2 に答える 2

0

私の問題は、私の collection_select データが Nil だったという事実によるものでした。基本的に、New アクションを実行しようとして失敗すると、Create に渡され、New ページを再レンダリングしようとしますが、collection_select データがなくなります。

これは私のものに似た回答へのリンクです -リンク

于 2012-09-21T14:16:33.027 に答える
0

コードの一部は、@print_dimensionsそこに渡すはずの列挙可能なオブジェクトを呼び出すため、このエラーが発生しています。nilcollection_selectmap

提供されたコードからなぜそれがnilなのかわかりません-print_dimensionsについての言及はありません。しかし、私の推測では、#newアクションの「失敗」部分ではなく、アクションのどこかでこの変数を初期化すると思います#create。しかし、それは単なる推測です。

于 2012-09-12T08:03:03.773 に答える