Контроллеры RoR: методы создания и обновления: @ record.save vs @ record.errors.any? - PullRequest
0 голосов
/ 12 мая 2018

Хорошо, это может быть расценено как "предпочтение стиля", а не "вопрос о деталях", но Google меня подводит.

В моем путешествии-самоучке (начиная с Rails 2) я научился делать это:

class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:user_id])
    ...
    if @user.save
      # handle success
    else
      # handle failure
    end
  end
  ...
end

Но в последнее время (Rails 4/5) я вижу пример использования этого:

class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:user_id])
    ...
    @user.save
    if @user.errors.any?
      # handle failure
    else
      # handle success
    end
  end
  ...
end

В чем дело? Я пропускаю какое-то улучшение?

Пятнистый в дикой природе:

(эти два из одной и той же кодовой базы, сгенерированной на хакатоне, где я впервые заметил изменение)

  1. events_controller.rb

  2. registrations_controller.rb

(и теперь я ищу в истории своего браузера, я буду публиковать больше по мере повторного поиска)

1 Ответ

0 голосов
/ 12 мая 2018

Второй шаблон используется немного по-другому. Когда вы устанавливаете свои атрибуты и используете сохранение, это излишне. Но часто вы можете использовать create метод. Таким образом, второй шаблон будет выглядеть так:

def create
  @user = User.create(user_params)
  if @user.errors.any?
    # handle failure
  else
    # handle success
  end
end

Как метод create возвращает экземпляр в результате.

Я думаю, update в этом подходе больше используется для согласованности и копирования, поскольку метод update возвращает логическое значение, и вы можете использовать первый шаблон для update.

def update
  if @user.update(user_params)
    # handle failure
  else
    # handle success
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...