Обновлять атрибуты для пользователя, только если атрибуты изменились

Оригинальная, счастливо работающая версия моего проекта выглядела так:

1) Пользователь заполняет форму (новое действие) и нажимает отправить (создать действие)

2) Пользователь перенаправляется на свою страницу редактирования (действие редактирования использует edit_id, созданный моделью, а не идентификатор автоматического создания Rails), которое показывает информацию, которую пользователь уже отправил

3) Пользователь может изменить информацию (обновить действие) и повторно отправить

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

С точки зрения базы данных мне все равно, потому что, поскольку форма предварительно заполнена информацией о пользователе, метод update_attributes просто переопределяет старую информацию той же самой информацией.

Однако, с точки зрения пользователя, это раздражает, поэтому я хочу убедиться, что информация обновляется, а предупреждение об успехе мигает только в том случае, если пользователь действительно что-то меняет.

Я думал, что это будет действительно легко, изменив старый код из этого:

def update
  @request = Request.find_by_edit_id(params[:edit_id])
  if @request.update_attributes(request_params) 
    flash[:success] = true
    redirect_to edit_request_path(@request.edit_id)
  else
    render 'edit'
  end
end

И добавление еще одного компонента к «если», как это:

def update
  @request = Request.find_by_edit_id(params[:edit_id])
  if @request.update_attributes(request_params) && @request.changed?
    flash[:success] = true
    redirect_to edit_request_path(@request.edit_id)
  else
    render 'edit'
  end
end

Но это не работает. Теперь происходит то, что на странице редактирования, если я не изменяю какую-либо информацию и не нажимаю кнопку «Отправить», ничего не происходит (и это здорово), но если я действительно изменяю информацию и нажимаю «Отправить», все равно ничего не происходит (что плохо). Что я делаю неправильно?

Примечание. Сначала я подумал, что это ошибка порядка операций, поэтому я сделал ее вложенной, если: сначала if @ request.update_attributes, а затем второй if @ request.changed, но это тоже не сработало ...

Ответы на вопрос(1)

Ваш ответ на вопрос