Все примеры сильных параметров в Rails 4 docs используют
params.require(:person).permit(:name, :age)
Может ли кто-нибудь, пожалуйста, разобрать и объяснить, что происходит с require
и permit
здесь?
Все примеры сильных параметров в Rails 4 docs используют
params.require(:person).permit(:name, :age)
Может ли кто-нибудь, пожалуйста, разобрать и объяснить, что происходит с require
и permit
здесь?
Ответы:
Контроллер params
in выглядит как Hash, но на самом деле это экземпляр ActionController::Parameters
, который предоставляет несколько методов, таких как require
и permit
.
В require
методе гарантирует , что конкретный параметр присутствует, и если это не предусмотрено, то require
метод выдает ошибку. Возвращает экземпляр ActionController::Parameters
ключа, переданного в require
.
permit
Метод возвращает копию объекта параметров, возвращая только разрешенные ключи и значения. При создании новой модели ActiveRecord в модель передаются только разрешенные атрибуты.
Он очень похож на белый список, который ранее был включен в модели ActiveRecord, но для него имеет больше смысла находиться в контроллере.
true
на permitted?
метод. По умолчанию экземпляр ActionController::Parameters
класса будет возвращен false
для permitted?
ответа, true
что permitted?
означает, что объект параметра может использоваться в массовом назначении; иначе приложение выдаст ошибку ForbiddenAttributes.
permit
на require
также разрешает и включать требуемые параметры в возвращенном объекте?
Чтобы быть более точным, когда вы создаете для, например. при этом .new(...)
должен быть :person
хеш, указанный в требовании, а хэш будет только принимать :name
и :age
указываться в разрешении.
Пример:
.new(person: { name: "Bhojendra", age: 32 }) // okay
.new(person: { name: "Rauniyar" }) // okay
.new(person: { name: "Bhojendra", other: 'asdf' }) // not okay, other not permitted
.new(person: { full_name: "Bhojendra Rauniyar" }) // not okay, full_name not permitted
.new(detail: { name: "Bhojendra", age: 32 }) // not okay, must be person
not okay
визуализируют 3-й и 4-й пример?
permit
но не объясняетrequire
.