0

Rails 3.2.13 にアップグレードした後、この問題が発生し始めました。

コントローラーにこのfilter_parametersメソッドのオーバーライドがあります

class Api::OrdersController < ApiController
  before_filter :protect_api

  def filter_parameters(unfiltered)
    filtered[:credit_card] = unfiltered[:credit_card].dup
    filtered[:credit_card][:number] = '[FILTERED]'
    filtered[:credit_card][:type] = '[FILTERED]'
    filtered
  end

そして私の仕様ではこれを持っています

put "/api/orders/#{order.number}",{credit_card: {
                                          number: '424242466624242',
                                          month: 9,
                                          year: Time.now.year + 1,
                                          first_name: 'bob',
                                          last_name: 'Joe',
                                          verification_value: '123',
                                          type: 'visa'
                                },

仕様を実行すると、エラーが発生します

Failure/Error: put "/api/orders/#{order.number}",{credit_card: {
     TypeError:
       can't dup NilClass

だから私はそれをこの行までたどりました

unfiltered[:credit_card].dup
puts unfiltered.class #Hash

また、ハッシュであるため、記号化されたキーで値を見つけることができません。

だから私はこれを試しました、

def filter_parameters(unfiltered)
    unfiltered = unfiltered.with_indifferent_access
    filtered = unfiltered.dup
    filtered[:credit_card] = unfiltered[:credit_card].dup
    filtered[:credit_card][:number] = '[FILTERED]'
    filtered[:credit_card][:type] = '[FILTERED]'
    filtered
end

しかし、filter_parameters メソッドは 2 回実行されているようで、2 回目はフィルタされていないパラメータは次のようになります:-

{"session_id"=>"c050d509b93f28d10b81976fcaf02d81", "timezone"=>"pst"}

この問題を解決する方法はありますか?

4

0 に答える 0