Vždy som mal dojem, že na vytvorenie a uloženie záznamu musíte bežať record.new
a record.save
, alebo record.create
.
Nikdy som nechápal, ako sa záznam uloží do tohto kódu:
def create
@record = Record.new(record_params)
if @record.save
#do stuff
end
end
Odstránil som if
riadok a záznam sa prestal ukladať. myslel som if
vyhlásenia len otestovali podmienky, alebo môžu vykonať aj úkony?
odpovede:
2 pre odpoveď č. 1metóda save
vráti true alebo false po vyvolaní metódy.v 1. kroku sa model pokúsi uložiť. ak sa uloží, záznamy sa uložia a v kroku 2 sa vráti hodnota true. ak sa neuloží, metóda vráti hodnotu false. Výroky if riadia, čo robiť v každej situácii.
if @model.save
end
3 pre odpoveď č. 2
Myslel som si, že ak výroky iba otestujú podmienky, alebo ich môžu vykonať akcie tiež?
V Ruby hodnotenie výrazu vráti truthy alebo falsey hodnotu, a to nezáleží, aký je samotný výraz.
Výraz bude nepravdivý výlučne ak sa vráti buď nil
alebo false
, inak je to truthy.
Takže po návrate k vášmu prípadu ActiveRecord :: Perzistencia #save
výnos true
ak sa záznam úspešne uloží, inak false
.
2 pre odpoveď č. 3
V Ruby if
je výraz (všetko je výraz), ktorý vracia hodnotu true alebo false. A rovnako ako akýkoľvek iný jazyk, aj obsah if
alebo else
alebo elsif
bloky sú spustené.
Keď vložíte predikát do výrazu, ktorý má vedľajšie účinky (napríklad uloženie záznamu do databázy), vedľajšie účinky sa samozrejme použijú! To platí pre väčšinu programovacích jazykov.
def foo
print "Hello "
true
end
if foo
print "world!"
end
1 pre odpoveď č. 4
V Ruby (a mnohých ďalších jazykoch) if
vyhlásenie otestovať stav. Ale na otestovanie podmienky musí vyhodnotiť kód v podmienke, tj. Vykonať ho.
Tak ako to tam robí. if
vyhlásenie vykoná @record.save
, save
metóda sa pokúsi uložiť @record
a vráti sa true
ak sa to podarilo úspešne. Ak záznam nedokáže uložiť, vráti sa false
.
potom if
skontroluje výsledok (true
alebo false
). @record
do tej doby sa už ukladanie vykonáva.
0 pre odpoveď č. 5
Tu @record.save
uloží záznam a vráti sa buď true
alebo false
A túto hodnotu vyhodnotí if
Normálne by ste to použili, keď chcete robiť nejaké akcie success
alebo failure
ukladaného záznamu