我想为用户提供单独的页面/对话框来编辑自己的信息。但是,信息保存在单个模型中(称为用户)。现在我正在尝试找到处理部分更新调用的最佳方法。我的代码目前:
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)。
答案 0 :(得分:0)
目前,我通过创建将在更新中处理的单独的edit_section参数解决了这个问题。
def update
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, :notice => (t :actionsuccesful) }
format.json { head :no_content }
else
action = if params[:edit_section] then "edit_" + params[:edit_section] else "edit" end
format.html { render :action => action, :layout=>!request.xhr? }
end
end
end
表格(edit_password等)
=form_for(@user, :remote => true) do |f|
= hidden_field_tag :edit_section, "password"