Усі приклади сильних параметрів у документах Rails 4 використовуються
params.require(:person).permit(:name, :age)
Може хтось, будь ласка, деконструює та пояснить, що відбувається з require
і permit
тут?
Усі приклади сильних параметрів у документах Rails 4 використовуються
params.require(:person).permit(:name, :age)
Може хтось, будь ласка, деконструює та пояснить, що відбувається з require
і permit
тут?
Відповіді:
params
У контролері виглядає як Hash, але це на самому справі є екземпляром ActionController::Parameters
, який надає кілька методів , таких як require
і permit
.
У require
методі гарантує , що конкретний параметр присутній, і якщо це не передбачено, то require
метод видає помилку. Він повертає екземпляр ActionController::Parameters
ключа, переданого в require
.
permit
Метод повертає копію об'єкта параметрів, повертаючи тільки дозволені ключі і значення. Створюючи нову модель ActiveRecord, в модель передаються лише дозволені атрибути.
Це дуже схоже на білі списки, які раніше були включені в моделі ActiveRecord, але має сенс бути в контролері.
true
на permitted?
метод. За замовчуванням екземпляр ActionController::Parameters
класу повернеться false
для permitted?
Responding, 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
візуалізують третій та четвертий приклад?
permit
але ніrequire
.