Оригинальная, счастливо работающая версия моего проекта выглядела так:
1) Пользователь заполняет форму (новое действие) и отправляет хиты (создавать действие)
2) Пользователь перенаправляется на свою страницу редактирования (для редактирования действия используется edit_id, созданный по модели, а не Rails auto-gen id), который показывает, что пользователь информации уже отправил
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
И добавив еще один компонент в "if":
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
Но это не работает. Теперь случается, что на странице редактирования, если я не изменю никакую информацию и не попаду в submit, ничего не произойдет (это здорово), но если я сделаю изменение информации и нажмите submit, все равно ничего не произойдет (что плохо). Что я делаю неправильно?
Примечание. Первоначально я думал, что это был порядок ошибок операций, поэтому я сделал его вложенным if, с первым, если @request.update_attributes, а второй, если @request.changed, но это тоже не сработало...