按照Railscasts#38 http://railscasts.com/episodes/38-multibutton-form中的有用教程,我为“新建”/“创建”控制器操作设置了“预览”按钮。
但是当我使用相同的方法进行“编辑”/“更新”时,似乎存在问题。
我似乎无法让我的表格坚持下去。
这是我的控制器的样子:
def update
stylesheets << 'feature'
@feature = Feature.find(params[:id])
case params[:submit]
when "Preview"
render :action => "edit"
return
when "Update"
respond_to do |format|
if @feature.update_attributes(params[:feature])
flash[:notice] = 'Feature was successfully updated.'
format.html { redirect_to(features_path) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @feature.errors, :status => :unprocessable_entity }
end
end
return
end
end
当我点击预览按钮时,我按预期返回到编辑屏幕,但我的编辑不会保留。有小费吗?好奇,因为这适用于预览新对象。
答案 0 :(得分:2)
这里发生的事情是,在呈现视图之前,您实际上并没有将用户所做的更改应用于内存模型,因此更改会丢失。
尝试更改“预览”案例,如下所示:
when "Preview"
@feature.attributes = params[:feature]
render :action => "edit"
return
我要说的一件事是,我还考虑将该方法拆分一下,以便更容易阅读和测试。像这样:
before_filter :set_stylesheets
def set_stylesheets
stylesheets << 'feature'
end
def update
@feature = Feature.find(params[:id])
preview if params[:submit] == 'Preview'
apply_update if params[:submit] == 'Update'
end
def preview
@feature.attributes = params[:feature]
render :action => "edit"
return
end
def apply_update
# Rest of update action here.
end
这有助于您保持测试简单并一次专注于一种方法,并且应该使代码更易于维护。