Я завжди відчував, що для створення та збереження запису треба запустити 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
збережених записів