Spec-Zone.ru › Ruby on Rails 4.1

модуль ActionController::ParamsWrapper

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

Эта функция включена в config/initializers/wrap_parameters.rb и может настраиваться. Если вы обновляетесь до Rails 3.1, этот файл необходимо создать, чтобы функция была включена.

Вы также можете включить её для каждого контроллера, установив массив форматов в непустой массив:

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

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

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

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

{"name": "Konata"}

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

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

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

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

Для моделей ActiveRecord без установленных опций :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 в качестве ключа.

Константы

EXCLUDE_PARAMETERS

Публичные методы экземпляра

process_action(*args) Показать исходный код

Выполняет обёртку параметров по запросу. Будет вызываться автоматически стеком вызова мета-методов.

Вызывает метод суперкласса
# File actionpack/lib/action_controller/metal/params_wrapper.rb, line 232
def process_action(*args)
  if _wrapper_enabled?
    if request.parameters[_wrapper_key].present?
      wrapped_hash = _extract_parameters(request.parameters)
    else
      wrapped_hash = _wrap_parameters request.request_parameters
    end

    wrapped_keys = request.request_parameters.keys
    wrapped_filtered_hash = _wrap_parameters request.filtered_parameters.slice(*wrapped_keys)

    # This will make the wrapped hash accessible from controller and view
    request.parameters.merge! wrapped_hash
    request.request_parameters.merge! wrapped_hash

    # This will make the wrapped hash displayed in the log file
    request.filtered_parameters.merge! wrapped_filtered_hash
  end
  super
end

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

Spec-Zone.ru

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