Spec-Zone.ru › Ruby on Rails 7.1

модуль ActionController::ParamsWrapper

Обёртка параметров Action Controller

Оборачивает хеш параметров в вложенный хеш. Это позволит клиентам отправлять запросы без необходимости указывать корневые элементы.

Эта функциональность включена по умолчанию для JSON и может быть настраиваема путём установки массива форматов:

class ApplicationController < ActionController::Base
  wrap_parameters format: [:json, :xml]
end

Вы также можете включить её для каждого контроллера:

class UsersController < ApplicationController
  wrap_parameters format: [:json, :xml, :url_encoded_form, :multipart_form]
end

Если вы включите ParamsWrapper для формата :json, вместо того, чтобы отправлять параметры JSON так:

{"user": {"name": "Konata"}}

Вы можете отправить параметры так:

{"name": "Konata"}

И они будут обернуты в вложенный хеш с именем ключа, соответствующим имени контроллера. Например, если вы отправляете POST-запрос на UsersController, ваш новый params хеш будет выглядеть так:

{"name" => "Konata", "user" => {"name" => "Konata"}}

Вы также можете указать ключ, в который нужно обернуть параметры, а также список атрибутов, которые нужно обернуть, используя опции :include или :exclude следующим образом:

class UsersController < ApplicationController
  wrap_parameters :person, include: [:username, :password]
end

В моделях Active Record без установленных опций :include или :exclude будут обернуты только параметры, возвращаемые методом класса attribute_names.

Если вы собираетесь передать параметры объекту ActiveModel (например, User.new(params[:user])), вы можете рассмотреть возможность передачи класса модели в метод вместо этого. ParamsWrapper будет пытаться определить список имён атрибутов из модели и обернуть только эти атрибуты:

class UsersController < ApplicationController
  wrap_parameters Person
end

Вы по-прежнему можете передать :include и :exclude для установки списка атрибутов, которые нужно обернуть.

По умолчанию, если вы не укажете ключ, в который обернуть параметры, ParamsWrapper будет пытаться определить, есть ли связанная с ним модель. Например, этот контроллер:

class Admin::UsersController < ApplicationController
end

попытается проверить, существует ли модель Admin::User или User, и использовать её для определения ключа обертки соответственно. Если обе модели не существуют, он вернётся к использованию user в качестве ключа.

Чтобы отключить эту функциональность для контроллера:

class UsersController < ApplicationController
  wrap_parameters false
end

Константы

EXCLUDE_PARAMETERS

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API