/ / Ako sa uloží riadok „if @ record.save“? - rubín-on-rails, rubín

Ako sa ukladá riadok "if @ record.save"? - rubín na koľajniciach, rubín

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ď č. 1

metó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