在我的Rails 4应用程序中,我有这个控制器:
class ProfilesController < ApplicationController
SECTIONS = %w(time currency letterhead)
def edit
section = Profile::SECTIONS.include?(params[:section]) ? params[:section] : Profile::SECTIONS[0]
session[:section] = section
end
def update
if @profile.update_attributes(profile_params)
flash[:success] = "Profile updated."
redirect_to edit_profile_path(:section => session[:section])
else
render :edit
end
end
end
在视图中,每个用户的个人资料记录使用GET参数分布在三个不同的标签中。
E.g。当用户处于“时间”选项卡并成功保存时,他/她将被重定向到同一选项卡。尼斯!
但不幸的是,当保存失败(并且Rails的验证启动)时,这不起作用。
我尝试将参数添加到render
,但无济于事。
有人可以告诉我这是最好的方法吗?
感谢您的帮助。
答案 0 :(得分:1)
render :edit, :locals => {:params1 => "value"}
使用locals
传递渲染中的参数
答案 1 :(得分:1)
我认为您正在视图中检查params[:section]
,并且您正在使用其值来确定要显示的标签。因此,最简单的解决方案是在else部分设置params[:section]
。
if @profile.update_attributes(profile_params)
flash[:success] = "Profile updated."
redirect_to edit_profile_path(:section => session[:section])
else
params[:section] = session[:section]
render :edit
end
另一种更简单的方法是在视图中使用session[:section]
,这样您就不必在请求之间传递它。