Rails 3 params нежелательная упаковка - PullRequest
19 голосов
/ 03 февраля 2012

Я отправляю некоторые JSON, подобные JSON-форме {:name => "hello"}, на мой контроллер Rails 3. ExampleController.

Вместо того, чтобы получать params, вроде:

{:name => "hello"}

Яполучение:

{:name => "hello", :controller => "example", :action => "index", :example => {:name => "hello"}

(Да, данные JSON появляются дважды! и добавляются действие и контроллер)

Есть идеи почему?

1 Ответ

35 голосов
/ 03 февраля 2012

ActionController автоматически делает это для запросов JSON, так что вы можете легко передавать параметры в Example.create или @example.update_attributes, что означает, что клиенту не нужно упаковывать их для вашей модели - он может просто включать name эт. и др. на верхнем уровне ваших данных JSON, и контроллер будет обрабатывать группировку.

@example = Example.create params[:example]

Код переноса параметров получает имя вашей модели от имени контроллера, но вы можете изменить его, используя макрос wrap_parameters в вашем контроллере:

wrap_parameters :thing

Или выключите его с помощью

wrap_parameters false

В Rails 3.2, если ваша модель использует attr_accessible, функция переноса параметров также исключит любые параметры, которые недоступны для массового назначения. Вы также можете использовать макрос, чтобы эта функция переноса применялась к другим типам контента, кроме JSON, если хотите.

По умолчанию во вновь созданном приложении Rails это настраивается для всех контроллеров, использующих инициализатор. Ищите config/initializers/wrap_parameters.rb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...