在一个应用程序中,我经常打开一个fancybox来创建一个对象。例如,创建新项目会在new
中点击projects_controller
操作,并在fancybox中呈现相应的new
视图。
在视图中,呈现表单并将表单的target
设置为'_parent'
,以便在创建页面时重定向到fancebox的父级。例如:
= simple_form_for Project.new, html: { target: '_parent' }
控制器中的create动作具有特定的业务逻辑,用于决定是否可以使用给定的输入创建对象,如果不能再次渲染新的动作,则预先填充最初输入的信息。这个问题是新的动作是在父视图而不是fancybox中呈现的。
有没有办法从控制器进行控制,应该在哪里呈现视图?这是fancybox中的一个功能吗?
更新
我用过这个
http://jonkinney.com/blog/2012/07/08/breaking-out-of-an-iframe-from-a-rails-controller/解决问题。为了完成这项工作,我不得不从表单中删除目标。 (从而假设创建失败并且必须再次在fancybox中呈现新的)。如果它实际上成功了,我将使用与文章中提到的breakout_path
相当的。这种方式有效但却以错误的方式感觉非常黑客。