Rails 4如何在重定向时保留表单数据

时间:2016-08-10 20:24:27

标签: ruby-on-rails

我有一个视图,我在其中列出数据,并允许用户创建新记录(部分)。问题是,表单存在于索引操作下,因此如果用户输入在重定向时无效,则会丢失表单的数据。

我想保留数据,因此用户无需再次输入数据。

控制器:

def index  
    @instance = Instance.new
end 

def create  
    w = current_user.workspaces.find_by_id(params[:"..."]
 if w.present?
  @instance =  current_user.workspaces.find_by_id( [:"..."]).instances.create(...) 
  [:info] = "Please check your email to activate your account."
      redirect_to root_url          
    else
      flash[:info] = "Please check your data" 
      redirect_to root_url
    end 

end

index.html.haml

= render :partial => 'partial1'

partial1.html.haml

= form_for @instance , url: {action: "create"}  do |f|

我知道'render'会保留表单的数据,但是会这样做:

def create  
    if something   
       ...
    else
       flash[:info] = "Please check your data" 
       render :index
    end 

end

我收到错误

  

表单中的第一个参数不能包含nil或为空

     

= form_for @instance,url:{action:“create”} do | f |

我该如何解决? 我不想在创建操作上初始化@instance,比如

def create  
 ...
 flash[:info] = "Please check your data" 
 @instance = Instance.create
 render :index

因为我会重复代码,这已经写在索引操作上了。

将其包起来:

我有一个复杂的索引视图,它有一个部分形式,带有一个复杂的控制器。 我无法渲染:创建动作的索引,因为我必须加载所有索引的实例变量。 如果数据不正确,我无法创建@instance变量,因为我有一个嵌套的表单。

1 个答案:

答案 0 :(得分:0)

  

我不想在创建操作上初始化@instance ...

嗯,你应该,因为你想要一个实例。但是,您应该使用表单中填充的参数“初始化”一个,而不是“创建”一个。所以做一些像:

def create  
 ...
 flash[:info] = "Please check your data" 
 @instance = Instance.new(params[:instance])
 render :index