2013-05-22 2 views
4

В 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=.

ответ

0

Это, вероятно, так, потому что байт params предназначен для бизнес-данных для вашего приложения, тогда как request.format представляет запросы ответа HTTP-запроса. Итак, что вы делаете с содержимым params, все равно будет таким же, но у вас будет гибкость в изменении формата запроса без изменения бизнес-данных.

Рассматривайте это как разделение проблем.

Смежные вопросы