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"}
この問題を解決する方法はありますか?