def edit
@title ="Edit account"
@page_name = "edit"
end
def update
if @wsp.update_attributes(params[:wsp])
# it worked
flash[:success] = "Profile updated."
if (@title == "Location")
redirect_to wsp_location_path
else
redirect_to edit_wsp_path
end
else
@title = "Edit account"
render 'edit'
end
end
在update方法中,变量@title为空。如何让@title持久化,以便我可以阅读它?
答案 0 :(得分:3)
每个控制器操作都在单独的请求中执行,因此您将丢失两者之间的值。
您可能需要使用session
,或者更好的是flash
来跨请求存储标题。
def edit
flash[:title] = @title = "Edit account"
...
end
def update
...
if (flash[:title] == "Location")
redirect_to wsp_location_path
else
redirect_to edit_wsp_path
end
end
答案 1 :(得分:0)
在edit
操作中,您应该将结果写入表单字段,可能是隐藏字段。然后在update
操作中从提交的表单中重新读取该数据。你真的不应该在这两个请求之间保留任何状态服务器端。
虽然您可以使用会话,但我会建议不要这样做。过度使用会话以在请求之间传递少量短期数据通常是不好的形式。
答案 2 :(得分:0)
如果这样做的目的是在编辑页面上显示它,为什么不把它放在那里(app/views/the_controller/edit.html.erb
)?这样它就会显示在该页面的所有请求上,并且您不会将视图/演示文稿代码放入不属于它的控制器中。