Что такое `params.require(: person).permit(: name,: age)` делать в Rails 4?

Все примеры сильных параметров в Rails 4 docs используют

params.require(:person).permit(:name, :age)

Может ли кто-нибудь разобрать и объяснить, что здесь происходит с require и permit?

Ответ 1

params в контроллере выглядит как хэш, но на самом деле это экземпляр ActionController::Parameters, который предоставляет несколько методов, таких как require и permit.

Метод require гарантирует наличие определенного параметра, и если он не указан, метод require вызывает ошибку. Он возвращает экземпляр ActionController::Parameters для ключа, переданного в require.

Метод permit возвращает копию объекта параметров, возвращая только разрешенные ключи и значения. При создании новой модели ActiveRecord в модель передаются только разрешенные атрибуты.

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

Ответ 2

Чтобы быть более точным, когда вы создаете для, например. При выполнении .new(...) должен быть хеш :person, указанный с помощью require, и хеш этого лица будет принимать только :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