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
Посмотрел код и пока не придумал простого решения вопроса.
Можете скинуть пример кода?
Сообщение возникает при вызове метода 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
Да, понял. Мы можем определить в контроллере метод permit_params
с params.permit!.to_h
по умолчанию с возможностью переопределения. Ну и нужно подумать, стоит ли дальше поддерживать Rails 3.2+ или сделать Rails 4+. Что думаете?
Не могу с определенностью сказать. Сделать так где меньше трудозатрат.