Spec-Zone.ru › Ruby on Rails 7.0

класс ActionController::Parameters

Родитель:
Объект

Параметры Action Controller

Позволяет выбрать, какие атрибуты должны быть разрешены для массового обновления, тем самым предотвращая случайное раскрытие конфиденциальных данных. Предоставляет два метода для этой цели: require и permit. Первый используется для обозначения параметров как обязательных. Последний используется для установки параметра как разрешенного и ограничения атрибутов, разрешенных для массового обновления.

params = ActionController::Parameters.new({
  person: {
    name: "Francesco",
    age:  22,
    role: "admin"
  }
})

permitted = params.require(:person).permit(:name, :age)
permitted            # => #<ActionController::Parameters {"name"=>"Francesco", "age"=>22} permitted: true>
permitted.permitted? # => true

Person.first.update!(permitted)
# => #<Person id: 1, name: "Francesco", age: 22, role: "user">

Предоставляет два параметра, которые контролируют поведение новых экземпляров на верхнем уровне:

  • permit_all_parameters - Если это true, все параметры будут разрешены по умолчанию. По умолчанию это false.

  • action_on_unpermitted_parameters - Контролирует поведение при возникновении параметров, которые не явно

    permitted are found. The default value is <tt>:log</tt> in test and development environments,
    +false+ otherwise. The values can be:
    • false для того чтобы ничего не делать.

    • :log для отправки события ActiveSupport::Notifications.instrument на тему unpermitted_parameters.action_controller и логирования на уровне DEBUG.

    • :raise для повышения исключения ActionController::UnpermittedParameters.

Примеры:

params = ActionController::Parameters.new
params.permitted? # => false

ActionController::Parameters.permit_all_parameters = true

params = ActionController::Parameters.new
params.permitted? # => true

params = ActionController::Parameters.new(a: "123", b: "456")
params.permit(:c)
# => #<ActionController::Parameters {} permitted: true>

ActionController::Parameters.action_on_unpermitted_parameters = :raise

params = ActionController::Parameters.new(a: "123", b: "456")
params.permit(:c)
# => ActionController::UnpermittedParameters: found unpermitted keys: a, b

Обратите внимание, что эти параметры *не потокобезопасны*. В многопоточной среде их следует устанавливать только один раз во время запуска и никогда не изменять во время выполнения.

Вы можете получить значения ActionController::Parameters, используя либо :key, либо "key".

params = ActionController::Parameters.new(key: "value")
params[:key]  # => "value"
params["key"] # => "value"

Константы

EMPTY_ARRAY
EMPTY_HASH
PERMITTED_SCALAR_TYPES

Это список разрешенных скалярных типов, который включает поддерживаемые типы в запросах XML и JSON.

Этот список используется в частности для фильтрации обычных запросов, String идет первым элементом для быстрого сокращения общего случая.

Если вы измените этот список, пожалуйста, обновите API для permit выше.

Атрибуты

parameters[R]
permitted[W]

Публичные методы класса

new(parameters = {}, logging_context = {}) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 267
def initialize(parameters = {}, logging_context = {})
  @parameters = parameters.with_indifferent_access
  @logging_context = logging_context
  @permitted = self.class.permit_all_parameters
end

Возвращает новый экземпляр ActionController::Parameters. Также устанавливает атрибут permitted в значение по умолчанию ActionController::Parameters.permit_all_parameters.

class Person < ActiveRecord::Base
end

params = ActionController::Parameters.new(name: "Francesco")
params.permitted?  # => false
Person.new(params) # => ActiveModel::ForbiddenAttributesError

ActionController::Parameters.permit_all_parameters = true

params = ActionController::Parameters.new(name: "Francesco")
params.permitted?  # => true
Person.new(params) # => #<Person id: nil, name: "Francesco">

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

==(other) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 275
def ==(other)
  if other.respond_to?(:permitted?)
    permitted? == other.permitted? && parameters == other.parameters
  else
    @parameters == other
  end
end

Возвращает true, если другой объект Parameters содержит то же самое содержимое и разрешённый флаг.

Также известен как: eql?
[](key) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 638
def [](key)
  convert_hashes_to_parameters(key, @parameters[key])
end

Возвращает параметр для данного key. Если не найден, возвращает nil.

params = ActionController::Parameters.new(person: { name: "Francesco" })
params[:person] # => #<ActionController::Parameters {"name"=>"Francesco"} permitted: false>
params[:none]   # => nil
[]=(key, value) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 644
def []=(key, value)
  @parameters[key] = value
end

Присваивает значение данному key. Заданный ключ всё ещё может быть отфильтрован, когда вызывается permit.

as_json(options=nil) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 138
    

Возвращает хэш, который может быть использован как JSON-представление параметров.

compact() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 814
def compact
  new_instance_with_inherited_permitted_status(@parameters.compact)
end

Возвращает новый экземпляр ActionController::Parameters с удалёнными значениями nil.

compact!() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 819
def compact!
  self if @parameters.compact!
end

Удаляет все значения nil на месте и возвращает self, или nil, если изменений не было.

compact_blank() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 825
def compact_blank
  reject { |_k, v| v.blank? }
end

Возвращает новый экземпляр ActionController::Parameters без пустых значений. Использует Object#blank? для определения, является ли значение пустым.

compact_blank!() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 831
def compact_blank!
  reject! { |_k, v| v.blank? }
end

Удаляет все пустые значения на месте и возвращает self. Использует Object#blank? для определения, является ли значение пустым.

converted_arrays() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 402
def converted_arrays
  @converted_arrays ||= Set.new
end

Атрибут, отслеживающий преобразованные массивы, если таковые имеются, чтобы избежать двойного цикла в распространённом случае permit + массового присваивания. Определён в методе для создания экземпляра только при необходимости.

Testing членство всё ещё использует цикл, но он будет быстрее, чем наш собственный цикл, который преобразует значения. Кроме того, мы не будем создавать новый объект массива для каждого извлечения.

deep_dup() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 912
def deep_dup
  self.class.new(@parameters.deep_dup, @logging_context).tap do |duplicate|
    duplicate.permitted = @permitted
  end
end

Возвращает дубликат объекта, включая все параметры.

deep_transform_keys(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 765
def deep_transform_keys(&block)
  new_instance_with_inherited_permitted_status(
    @parameters.deep_transform_keys(&block)
  )
end

Возвращает новый экземпляр ActionController::Parameters с результатами выполнения block один раз для каждого ключа. Это включает ключи из корневого хэша и из всех вложенных хэшей и массивов. Значения не изменяются.

deep_transform_keys!(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 774
def deep_transform_keys!(&block)
  @parameters.deep_transform_keys!(&block)
  self
end

Возвращает экземпляр ActionController::Parameters, изменяя его ключи. Это включает ключи из корневого хэша и из всех вложенных хэшей и массивов. Значения не изменяются.

delete(key, &block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 783
def delete(key, &block)
  convert_value_to_parameters(@parameters.delete(key, &block))
end

Удаляет пару ключ-значение из Parameters и возвращает значение. Если key не найден, возвращает nil (или, с необязательным блоком кода, передаёт key и возвращает результат). См. #extract!, который возвращает соответствующий объект ActionController::Parameters.

delete_if(&block)
Псевдоним для: reject!
dig(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 682
def dig(*keys)
  convert_hashes_to_parameters(keys.first, @parameters[keys.first])
  @parameters.dig(*keys)
end

Извлекает вложенный параметр из данного keys путём вызова dig на каждом шаге. Возвращает nil, если какой-либо промежуточный шаг является nil.

params = ActionController::Parameters.new(foo: { bar: { baz: 1 } })
params.dig(:foo, :bar, :baz) # => 1
params.dig(:foo, :zot, :xyz) # => nil

params2 = ActionController::Parameters.new(foo: [10, 11, 12])
params2.dig(:foo, 1) # => 11
each(&block)
Псевдоним для: each_pair
each_key() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 146
    

Вызывает блок один раз для каждого ключа в параметрах, передавая ключ. Если блок не задан, вместо этого возвращается перечислитель.

each_pair() { |key, convert_hashes_to_parameters(key, value)| ... } Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 374
def each_pair(&block)
  return to_enum(__callee__) unless block_given?
  @parameters.each_pair do |key, value|
    yield [key, convert_hashes_to_parameters(key, value)]
  end

  self
end

Преобразует все хэши в значения в параметры, затем передаёт каждую пару так же, как Hash#each_pair.

Также известен как: each
each_value() { |convert_hashes_to_parameters(key, value)| ... } Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 386
def each_value(&block)
  return to_enum(:each_value) unless block_given?
  @parameters.each_pair do |key, value|
    yield convert_hashes_to_parameters(key, value)
  end

  self
end

Преобразует все хэши в значения в параметры, затем передаёт каждое значение так же, как Hash#each_value.

empty?() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 155
    

Возвращает true, если параметры не имеют пар ключ/значение.

eql?(other)
Псевдоним для: ==
except(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 711
def except(*keys)
  new_instance_with_inherited_permitted_status(@parameters.except(*keys))
end

Возвращает новый экземпляр ActionController::Parameters, который фильтрует заданные keys.

params = ActionController::Parameters.new(a: 1, b: 2, c: 3)
params.except(:a, :b) # => #<ActionController::Parameters {"c"=>3} permitted: false>
params.except(:d)     # => #<ActionController::Parameters {"a"=>1, "b"=>2, "c"=>3} permitted: false>
extract!(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 720
def extract!(*keys)
  new_instance_with_inherited_permitted_status(@parameters.extract!(*keys))
end

Удаляет и возвращает пары ключ/значение, соответствующие заданным ключам.

params = ActionController::Parameters.new(a: 1, b: 2, c: 3)
params.extract!(:a, :b) # => #<ActionController::Parameters {"a"=>1, "b"=>2} permitted: false>
params                  # => #<ActionController::Parameters {"c"=>3} permitted: false>
fetch(key, *args) { || ... } Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 661
def fetch(key, *args)
  convert_value_to_parameters(
    @parameters.fetch(key) {
      if block_given?
        yield
      else
        args.fetch(0) { raise ActionController::ParameterMissing.new(key, @parameters.keys) }
      end
    }
  )
end

Возвращает параметр для заданного key. Если key не найден, есть несколько вариантов: без дополнительных аргументов, он вызовет ошибку ActionController::ParameterMissing; если задан второй аргумент, то он возвращается (преобразованный в экземпляр ActionController::Parameters, если это возможно); если задан блок, то он будет выполнен, и его результат будет возвращён.

params = ActionController::Parameters.new(person: { name: "Francesco" })
params.fetch(:person)               # => #<ActionController::Parameters {"name"=>"Francesco"} permitted: false>
params.fetch(:none)                 # => ActionController::ParameterMissing: param is missing or the value is empty: none
params.fetch(:none, {})             # => #<ActionController::Parameters {} permitted: false>
params.fetch(:none, "Francesco")    # => "Francesco"
params.fetch(:none) { "Francesco" } # => "Francesco"
has_key?(key) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 163
    

Возвращает true, если заданный ключ присутствует в параметрах.

has_value?(value) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 171
    

Возвращает true, если заданное значение присутствует для какого-то ключа в параметрах.

hash() Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 284
def hash
  [@parameters.hash, @permitted].hash
end
include?(key) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 179
    

Возвращает true, если заданный ключ присутствует в параметрах.

inspect() Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 880
def inspect
  "#<#{self.class} #{@parameters} permitted: #{@permitted}>"
end
keep_if(&block)
Псевдоним для: select!
key?(key) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 187
    

Возвращает true, если заданный ключ присутствует в параметрах.

keys() Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 203
    

Возвращает новый массив ключей параметров.

member?(key) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 195
    

Возвращает true, если заданный ключ присутствует в параметрах.

merge(other_hash) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 843
def merge(other_hash)
  new_instance_with_inherited_permitted_status(
    @parameters.merge(other_hash.to_h)
  )
end

Возвращает новый ActionController::Parameters со всеми ключами из other_hash, слитыми в текущий хэш.

merge!(other_hash) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 851
def merge!(other_hash)
  @parameters.merge!(other_hash.to_h)
  self
end

Возвращает текущий экземпляр ActionController::Parameters с other_hash, слитым в текущий хэш.

permit(*filters) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 615
def permit(*filters)
  params = self.class.new

  filters.flatten.each do |filter|
    case filter
    when Symbol, String
      permitted_scalar_filter(params, filter)
    when Hash
      hash_filter(params, filter)
    end
  end

  unpermitted_parameters!(params) if self.class.action_on_unpermitted_parameters

  params.permit!
end

Возвращает новый экземпляр ActionController::Parameters, который включает только заданные filters и устанавливает атрибут permitted для объекта на true. Это полезно для ограничения атрибутов, которые должны быть разрешены для массового обновления.

params = ActionController::Parameters.new(user: { name: "Francesco", age: 22, role: "admin" })
permitted = params.require(:user).permit(:name, :age)
permitted.permitted?      # => true
permitted.has_key?(:name) # => true
permitted.has_key?(:age)  # => true
permitted.has_key?(:role) # => false

Только разрешённые скаляры проходят фильтр. Например, при

params.permit(:name)

:name проходит, если это ключ params, связанное значение которого является типом String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile или Rack::Test::UploadedFile. В противном случае ключ :name отфильтровывается.

Вы можете объявить, что параметр должен быть массивом разрешённых скаляров, сопоставив его с пустым массивом:

params = ActionController::Parameters.new(tags: ["rails", "parameters"])
params.permit(tags: [])

Иногда невозможно или неудобно объявлять допустимые ключи параметра хэша или его внутреннюю структуру. Просто сопоставьте с пустым хэшем:

params.permit(preferences: {})

Будьте осторожны, так как это открывает дверь к произвольному вводу. В этом случае permit гарантирует, что значения в возвращаемой структуре являются разрешёнными скалярами, и отфильтровывает всё остальное.

Вы также можете использовать permit для вложенных параметров, таких как:

params = ActionController::Parameters.new({
  person: {
    name: "Francesco",
    age:  22,
    pets: [{
      name: "Purplish",
      category: "dogs"
    }]
  }
})

permitted = params.permit(person: [ :name, { pets: :name } ])
permitted.permitted?                    # => true
permitted[:person][:name]               # => "Francesco"
permitted[:person][:age]                # => nil
permitted[:person][:pets][0][:name]     # => "Purplish"
permitted[:person][:pets][0][:category] # => nil

Обратите внимание, что если вы используете permit в ключе, указывающем на хэш, он не разрешит весь хэш. Вам также нужно указать, какие атрибуты внутри хэша должны быть разрешены.

params = ActionController::Parameters.new({
  person: {
    contact: {
      email: "none@test.com",
      phone: "555-1234"
    }
  }
})

params.require(:person).permit(:contact)
# => #<ActionController::Parameters {} permitted: true>

params.require(:person).permit(contact: :phone)
# => #<ActionController::Parameters {"contact"=>#<ActionController::Parameters {"phone"=>"555-1234"} permitted: true>} permitted: true>

params.require(:person).permit(contact: [ :email, :phone ])
# => #<ActionController::Parameters {"contact"=>#<ActionController::Parameters {"email"=>"none@test.com", "phone"=>"555-1234"} permitted: true>} permitted: true>

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

params = ActionController::Parameters.new({
  person: {
    '0': {
      email: "none@test.com",
      phone: "555-1234"
    },
    '1': {
      email: "nothing@test.com",
      phone: "555-6789"
    },
  }
})
params.permit(person: [:email]).to_h
# => {"person"=>{"0"=>{"email"=>"none@test.com"}, "1"=>{"email"=>"nothing@test.com"}}}

Если вы хотите указать, какие ключи вы хотите от каждого числового ключа, вы можете вместо этого указать каждый из них индивидуально

params = ActionController::Parameters.new({
  person: {
    '0': {
      email: "none@test.com",
      phone: "555-1234"
    },
    '1': {
      email: "nothing@test.com",
      phone: "555-6789"
    },
  }
})
params.permit(person: { '0': [:email], '1': [:phone]}).to_h
# => {"person"=>{"0"=>{"email"=>"none@test.com"}, "1"=>{"phone"=>"555-6789"}}}
permit!() Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 428
def permit!
  each_pair do |key, value|
    Array.wrap(value).flatten.each do |v|
      v.permit! if v.respond_to? :permit!
    end
  end

  @permitted = true
  self
end

Устанавливает атрибут permitted на true. Это можно использовать для передачи массового назначения. Возвращает self.

class Person < ActiveRecord::Base
end

params = ActionController::Parameters.new(name: "Francesco")
params.permitted?  # => false
Person.new(params) # => ActiveModel::ForbiddenAttributesError
params.permit!
params.permitted?  # => true
Person.new(params) # => #<Person id: nil, name: "Francesco">
permitted?() Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 412
def permitted?
  @permitted
end

Возвращает true, если параметр разрешён, false в противном случае.

params = ActionController::Parameters.new
params.permitted? # => false
params.permit!
params.permitted? # => true
reject(&block) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 802
def reject(&block)
  new_instance_with_inherited_permitted_status(@parameters.reject(&block))
end

Возвращает новый экземпляр ActionController::Parameters с удалёнными элементами, для которых блок возвращает true.

reject!(&block) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 807
def reject!(&block)
  @parameters.reject!(&block)
  self
end

Удаляет элементы, для которых блок возвращает true, и возвращает self.

Также псевдоним для: delete_if
require(key) Показать исходный код
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 489
def require(key)
  return key.map { |k| require(k) } if key.is_a?(Array)
  value = self[key]
  if value.present? || value == false
    value
  else
    raise ParameterMissing.new(key, @parameters.keys)
  end
end

Этот метод принимает как одиночный ключ, так и массив ключей.

При передаче одиночного ключа, если он существует и его связанное значение присутствует или является одиночным false, возвращает это значение:

ActionController::Parameters.new(person: { name: "Francesco" }).require(:person)
# => #<ActionController::Parameters {"name"=>"Francesco"} permitted: false>

В противном случае генерирует ошибку ActionController::ParameterMissing:

ActionController::Parameters.new.require(:person)
# ActionController::ParameterMissing: param is missing or the value is empty: person

ActionController::Parameters.new(person: nil).require(:person)
# ActionController::ParameterMissing: param is missing or the value is empty: person

ActionController::Parameters.new(person: "\t").require(:person)
# ActionController::ParameterMissing: param is missing or the value is empty: person

ActionController::Parameters.new(person: {}).require(:person)
# ActionController::ParameterMissing: param is missing or the value is empty: person

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

params = ActionController::Parameters.new(user: { ... }, profile: { ... })
user_params, profile_params = params.require([:user, :profile])

В противном случае метод повторно генерирует первую найденную ошибку:

params = ActionController::Parameters.new(user: {}, profile: {})
user_params, profile_params = params.require([:user, :profile])
# ActionController::ParameterMissing: param is missing or the value is empty: user

Технически этот метод может быть использован для получения конечных значений:

# CAREFUL
params = ActionController::Parameters.new(person: { name: "Finn" })
name = params.require(:person).require(:name) # CAREFUL

но имейте в виду, что в какой-то момент они должны быть разрешены:

def person_params
  params.require(:person).permit(:name).tap do |person_params|
    person_params.require(:name) # SAFER
  end
end

например.

Также псевдоним для: required
required(key)

Псевдоним для require.

Псевдоним для: require
END_OF_DOCUMENT_MARKER
reverse_merge(other_hash) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 858
def reverse_merge(other_hash)
  new_instance_with_inherited_permitted_status(
    other_hash.to_h.merge(@parameters)
  )
end

Возвращает новый ActionController::Parameters со всеми ключами из текущего хеша, объединенными в other_hash.

Также называется как: with_defaults
reverse_merge!(other_hash) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 867
def reverse_merge!(other_hash)
  @parameters.merge!(other_hash.to_h) { |key, left, right| left }
  self
end

Возвращает текущий экземпляр ActionController::Parameters с текущим хешем, объединенным в other_hash.

Также называется как: with_defaults!
select(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 789
def select(&block)
  new_instance_with_inherited_permitted_status(@parameters.select(&block))
end

Возвращает новый экземпляр ActionController::Parameters только с элементами, для которых блок возвращает true.

select!(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 794
def select!(&block)
  @parameters.select!(&block)
  self
end

Эквивалент Hash#keep_if, но возвращает nil, если не было внесено изменений.

Также называется как: keep_if
slice(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 694
def slice(*keys)
  new_instance_with_inherited_permitted_status(@parameters.slice(*keys))
end

Возвращает новый экземпляр ActionController::Parameters, который включает только заданные keys. Если заданные keys не существуют, возвращает пустой хеш.

params = ActionController::Parameters.new(a: 1, b: 2, c: 3)
params.slice(:a, :b) # => #<ActionController::Parameters {"a"=>1, "b"=>2} permitted: false>
params.slice(:d)     # => #<ActionController::Parameters {} permitted: false>
slice!(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 700
def slice!(*keys)
  @parameters.slice!(*keys)
  self
end

Возвращает текущий экземпляр ActionController::Parameters, который содержит только заданные keys.

to_h() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 300
def to_h
  if permitted?
    convert_parameters_to_hashes(@parameters, :to_h)
  else
    raise UnfilteredParameters
  end
end

Возвращает безопасное представление ActiveSupport::HashWithIndifferentAccess параметров со всеми недопустимыми ключами, удаленными.

params = ActionController::Parameters.new({
  name: "Senjougahara Hitagi",
  oddity: "Heavy stone crab"
})
params.to_h
# => ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash

safe_params = params.permit(:name)
safe_params.to_h # => {"name"=>"Senjougahara Hitagi"}
to_hash() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 320
def to_hash
  to_h.to_hash
end

Возвращает безопасное представление Hash параметров со всеми недопустимыми ключами, удаленными.

params = ActionController::Parameters.new({
  name: "Senjougahara Hitagi",
  oddity: "Heavy stone crab"
})
params.to_hash
# => ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash

safe_params = params.permit(:name)
safe_params.to_hash # => {"name"=>"Senjougahara Hitagi"}
to_param(*args)
Псевдоним для: to_query
to_query(*args) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 352
def to_query(*args)
  to_h.to_query(*args)
end

Возвращает строковое представление получателя, подходящее для использования в качестве строки запроса URL:

params = ActionController::Parameters.new({
  name: "David",
  nationality: "Danish"
})
params.to_query
# => ActionController::UnfilteredParameters: unable to convert unpermitted parameters to hash

safe_params = params.permit(:name, :nationality)
safe_params.to_query
# => "name=David&nationality=Danish"

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

params = ActionController::Parameters.new({
  name: "David",
  nationality: "Danish"
})
safe_params = params.permit(:name, :nationality)
safe_params.to_query("user")
# => "user%5Bname%5D=David&user%5Bnationality%5D=Danish"

Строковые пары «ключ=значение», которые составляют строку запроса, сортируются лексикографически в порядке возрастания.

Этот метод также является псевдонимом для to_param.

Также называется как: to_param
to_s() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 211
    

Возвращает содержимое параметров в виде строки.

to_unsafe_h() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 367
def to_unsafe_h
  convert_parameters_to_hashes(@parameters, :to_unsafe_h)
end

Возвращает небезопасное, нефильтрованное представление ActiveSupport::HashWithIndifferentAccess параметров.

params = ActionController::Parameters.new({
  name: "Senjougahara Hitagi",
  oddity: "Heavy stone crab"
})
params.to_unsafe_h
# => {"name"=>"Senjougahara Hitagi", "oddity" => "Heavy stone crab"}
Также называется как: to_unsafe_hash
to_unsafe_hash()
Псевдоним для: to_unsafe_h
transform_keys(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 747
def transform_keys(&block)
  return to_enum(:transform_keys) unless block_given?
  new_instance_with_inherited_permitted_status(
    @parameters.transform_keys(&block)
  )
end

Возвращает новый экземпляр ActionController::Parameters с результатами выполнения block один раз для каждого ключа. Значения не изменяются.

transform_keys!(&block) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 756
def transform_keys!(&block)
  return to_enum(:transform_keys!) unless block_given?
  @parameters.transform_keys!(&block)
  self
end

Выполняет преобразование ключей и возвращает измененный экземпляр ActionController::Parameters.

transform_values() { |convert_value_to_parameters(v)| ... } Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 730
def transform_values
  return to_enum(:transform_values) unless block_given?
  new_instance_with_inherited_permitted_status(
    @parameters.transform_values { |v| yield convert_value_to_parameters(v) }
  )
end

Возвращает новый ActionController::Parameters с результатами выполнения block один раз для каждого значения. Ключи не изменяются.

params = ActionController::Parameters.new(a: 1, b: 2, c: 3)
params.transform_values { |x| x * 2 }
# => #<ActionController::Parameters {"a"=>2, "b"=>4, "c"=>6} permitted: false>
transform_values!() { |convert_value_to_parameters(v)| ... } Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 739
def transform_values!
  return to_enum(:transform_values!) unless block_given?
  @parameters.transform_values! { |v| yield convert_value_to_parameters(v) }
  self
end

Выполняет преобразование значений и возвращает измененный экземпляр ActionController::Parameters.

value?(value) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 219
    

Возвращает true, если заданное значение присутствует для некоторого ключа в параметрах.

values() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 233
delegate :keys, :key?, :has_key?, :member?, :values, :has_value?, :value?, :empty?, :include?,
  :as_json, :to_s, :each_key, to: :@parameters

Возвращает новый массив значений параметров.

values_at(*keys) Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 837
def values_at(*keys)
  convert_value_to_parameters(@parameters.values_at(*keys))
end

Возвращает значения, которые были присвоены заданным keys. Обратите внимание, что все объекты Hash будут преобразованы в ActionController::Parameters.

with_defaults(other_hash)
Псевдоним для: reverse_merge
with_defaults!(other_hash)
Псевдоним для: reverse_merge!

Защищенные методы экземпляра

each_nested_attribute() { |v| ... } Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 927
def each_nested_attribute
  hash = self.class.new
  self.each { |k, v| hash[k] = yield v if Parameters.nested_attribute?(k, v) }
  hash
end
nested_attributes?() Show source
# File actionpack/lib/action_controller/metal/strong_parameters.rb, line 923
def nested_attributes?
  @parameters.any? { |k, v| Parameters.nested_attribute?(k, v) }
end

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

Spec-Zone.ru

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