Wszystkie przykłady mocnych parametrów w dokumentach Rails 4 są używane
params.require(:person).permit(:name, :age)
Czy ktoś mógłby zdekonstruować i wyjaśnić, co się dzieje z require
i permit
tutaj?
Wszystkie przykłady mocnych parametrów w dokumentach Rails 4 są używane
params.require(:person).permit(:name, :age)
Czy ktoś mógłby zdekonstruować i wyjaśnić, co się dzieje z require
i permit
tutaj?
Odpowiedzi:
W params
kontrolerze wygląda jak Hash, ale w rzeczywistości jest instancją ActionController::Parameters
, która udostępnia kilka metod, takich jak require
i permit
.
Te require
metoda gwarantuje, że konkretny parametr jest obecny, a jeśli nie jest podana, require
metoda wygeneruje błąd. Zwraca instancję ActionController::Parameters
klucza przekazanego do require
.
permit
Metoda zwraca kopię obiektu parametrów, wracając tylko dozwolone klucze i wartości. Podczas tworzenia nowego modelu ActiveRecord do modelu przekazywane są tylko dozwolone atrybuty.
Wygląda bardzo podobnie do białej listy, która była wcześniej zawarta w modelach ActiveRecord, ale bardziej sensowne jest, aby znajdowała się w kontrolerze.
true
na permitted?
metodę. Domyślnie instancja ActionController::Parameters
klasy powróci false
do permitted?
reagowania true
na permitted?
drodze przedmiotem parametr może być stosowane w przypisania mas; w przeciwnym razie aplikacja zgłosi błąd ForbiddenAttributes.
permit
włączone require
również pozwala i zawiera wymagane parametry w zwracanym obiekcie?
Mówiąc dokładniej, gdy tworzysz np. robiąc .new(...)
, musi istnieć :person
hash oznaczony wymaganiem, a osoba ta będzie akceptować :name
i :age
wskazywać na zezwolenie.
Przykład:
.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
wizualizują trzeci i czwarty przykład?
permit
ale nierequire
.