/ / Як рядок "if @ record.save" зберігає запис? - рубін на рейках, рубін

Як рядок "if @ record.save" зберігає запис? - рубіни на рельсах, рубінові

Я завжди відчував, що для створення та збереження запису треба запустити record.new і record.save, або record.create.

Я ніколи не розумів, як запис зберігається в цьому коді:

def create
@record = Record.new(record_params)
if @record.save
#do stuff
end
end

Я вилучив if рядок і запис перестали зберігатися. я думав if висловлювань тільки що випробувані умови, або вони можуть виконувати дії теж?

Відповіді:

2 для відповіді № 1

метод save повертає true або false після того, як метод викликається. крок 1, модель намагається зберегти. якщо вона зберігається, записи зберігаються, а крок 2 повертає true. якщо він не зберігає, метод повертає false. Ваші оператори if контролюють, що робити для кожної ситуації.

if @model.save
end

3 для відповіді № 2

Я думав, якщо висловлювання тільки перевірили умови, чи можуть вони виконувати дії?

У Ruby, вираження оцінки повертає або істинне, або falsey значення, і це не важливо, що саме вираження.

Вираз буде falsey виключно якщо він повертається nil або falseінакше це правда.

Отже, повертаючись до вашого випадку, ActiveRecord :: Стійкість #save повертає true якщо запис успішно збережено, інакше false.


2 для відповіді № 3

У Ruby if є виразом (все це вираз), яке повертає true або false. І так само, як і будь-яка інша мова, вміст if або else або elsif запускаються блоки.

Коли ви розміщуєте предикат у виразі, який має побічні ефекти (наприклад, збереження запису до бази даних), звичайно, застосовуються побічні ефекти! Це стосується більшості мов програмування.

def foo
print "Hello "
true
end

if foo
print "world!"
end

1 для відповіді № 4

У Ruby (і на багатьох інших мовах) if твердження тесту стану. Але щоб перевірити стан, він повинен оцінити код у стані, тобто виконати його.

Так як це робиться там. if виконання виконується @record.save, save метод намагається зберегти @record і повертається true якщо це було успішно. Якщо він не може зберегти запис, він повертається false.

Потім if перевіряє результат (true або false) @record до цього часу вже виконується збереження.


0 для відповіді № 5

Ось тут @record.save збереже запис і він також повернеться true або false

І цю цінність буде оцінювати if

Зазвичай ви використовуєте це, коли потрібно виконати певні дії success або failure збережених записів