Я хочу предоставить пользователям отдельные страницы / диалоги для редактирования их собственной информации. Тем не менее, информация хранится в одной модели (называется пользователь). Теперь я пытаюсь найти лучший подход для обработки вызовов обновления от частичных. Мой код в настоящее время:
def edit
render :layout=>!request.xhr?
end
def edit_password
render :layout=>!request.xhr?
end
def edit_extra
unless @user.extra
@user.build_extra
@user.extra.value = 2047
end
render :layout=>!request.xhr?
end
def update
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, :notice => 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render :action => "edit", :layout=>!request.xhr? }
end
end
end
Дело в том, что все формы в методах (edit, edit_password и edit_extra) вызывают метод update. Однако есть две проблемы:
- Если синтаксический анализ данных не подтвержден, пользователю предоставляется форма редактирования, которая является неправильной.
- Я хочу получить подтверждение пароля на дополнительные данные. Пользователь не должен иметь возможность редактировать эту информацию, если он не введет правильный пароль.
Я хотел бы сделать более обобщенное решение, чем просто дублирование кода обновления. Самая большая проблема - рендеринг правильного макета (edit, edit_password) на основе текущего действия.