RuntimeLLC/payanyway

Rails 5: ActionController::Parameters сейчас возвращает Object вместо Hash

Closed this issue · 5 comments

Приветствую!

В консоли показывает сообщение: Method each_with_object is deprecated and will be removed in Rails 5.1

Вот обсуждение: http://stackoverflow.com/questions/34949505/rails-5-unable-to-retrieve-hash-values-from-parameter#34951198

Посмотрел код и пока не придумал простого решения вопроса.

llxff commented

Можете скинуть пример кода?

Сообщение возникает при вызове метода pay (подтверждение успешного платежа)

Вот участок кода в котором ранее был Hash, а теперь Object

settings.rb

class Hash
  def to_settings
    Payanyway::Helpers::Settings.new(self)
  end
end

module Payanyway
  module Helpers
    class Settings
      delegate :[], to: '@settings'

      def initialize(settings)
        @settings = HashWithIndifferentAccess.new(settings.invert)
      end

      # Выбирает из настроек нужные
      # и подставляет в переданный hash
      #
      #   @settings = { 'MNT_ID' => :id, 'MNT_CURRENCY' => :currency }
      #   hash = { id: 1 }
      #   => { 'MNT_ID': 1 }
      def configure_by(hash)
        hash.each_with_object({}) do |(key, value), memo|
          memo[ @settings[key] ] = value if @settings.has_key?(key)
        end
      end
    end
  end
end
llxff commented

Да, понял. Мы можем определить в контроллере метод permit_params с params.permit!.to_h по умолчанию с возможностью переопределения. Ну и нужно подумать, стоит ли дальше поддерживать Rails 3.2+ или сделать Rails 4+. Что думаете?

Не могу с определенностью сказать. Сделать так где меньше трудозатрат.

llxff commented

Остановился на варианте c permitted_params, поддержку Rails 3.2+ оставили пока (eeb0e02)