如何渲染动作加上GET参数?

时间:2015-06-08 10:33:08

标签: ruby-on-rails ruby

在我的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,但无济于事。

有人可以告诉我这是最好的方法吗?

感谢您的帮助。

2 个答案:

答案 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],这样您就不必在请求之间传递它。