我有一个视图,我在其中列出数据,并允许用户创建新记录(部分)。问题是,表单存在于索引操作下,因此如果用户输入在重定向时无效,则会丢失表单的数据。
我想保留数据,因此用户无需再次输入数据。
控制器:
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变量,因为我有一个嵌套的表单。
答案 0 :(得分:0)
我不想在创建操作上初始化@instance ...
嗯,你应该,因为你想要一个实例。但是,您应该使用表单中填充的参数“初始化”一个,而不是“创建”一个。所以做一些像:
def create
...
flash[:info] = "Please check your data"
@instance = Instance.new(params[:instance])
render :index