В Rails 3, params
и request.parameters
обратитесь к тому же объекту.Rails 4: установка request.format не обновляет параметры [: format]
С добавлением сильных параметров в Rails 4, params
теперь относится к отдельному экземпляру ActionController::Parameters
, который создан с request.parameters
.
Побочным эффектом этого является то, что когда-то вы назвали params
(тем самым создавая отчетливое Parameters
объект), вызывая request.format=
не будет обновлять params
.
Rails 3:
params # set @_params to request.parameters
request.format = "mobile"
params[:format]
=> "mobile"
Rails 4:
params # set @_params to Parameters.new(request.parameters)
request.format = "mobile"
params[:format]
=> nil
Это технически не ошибка, потому что это достаточно легко для кода клиента, чтобы смотреть request.format
вместо params[:format]
в качестве источника истины за эту информацию (и не рассчитывать на возможность использования как взаимозаменяемых).
Но это чувствует себя как регрессия дизайна для меня. Если бы params
и request.parameters
были теми же «за исключением исключений», это вызывает у нас ошибку, и я ожидаю, что это вызовет ошибки для многих разработчиков в будущем.
Я делаю это неправильно? Если да, почему это не проблема, и что я должен делать по-другому? Обратите внимание, что прецедент, который привел меня по этому пути, является точным из docs for format=.