Rails - 相同的模型/控制器,但不同的视图
Posted
技术标签:
【中文标题】Rails - 相同的模型/控制器,但不同的视图【英文标题】:Rails - Same Model/Controller, but different View 【发布时间】:2011-05-02 22:04:53 【问题描述】:我正在构建一个表单向导,引导用户完成已创建和部署的表单。模型和控制器应该保持不变,唯一改变的是视图(引导用户通过每个表单字段)。完成这项任务的最佳(如果可能,也是最简单的)方法是什么?
即使通过向导,一旦用户保存表单,它也会通过相同的模型和控制器保存到相同的数据库中。通过一些研究,这似乎可以通过明显地创建一个新视图,创建一个扩展原始控制器的简单控制器,并将新控制器路由到新视图来实现。
非常感谢任何建议。谢谢!
【问题讨论】:
【参考方案1】:在做了一些研究之后,我想出了几种方法来完成我的任务:
一种简单的方法是在表单的控制器中创建一个向导操作。让向导操作呈现向导的视图。 更好的方法是创建一个向导控制器并让它继承表单控制器。覆盖新操作,并呈现向导视图。这是更受欢迎的方法,因为 Rails 中的基本 CRUD 操作免费获取 REST。因此,遵循此方法将产生一个 RESTful 向导。【讨论】:
【参考方案2】:你一定要看看这里:
http://railscasts.com/episodes/217-multistep-forms
否则,为了简短回答,您可以告诉控制器的任何操作来呈现您想要的任何视图。这就是在基本脚手架控制器中所做的:
render :edit
【讨论】:
@apneadiving 我可以简单地创建一个继承ApplicationController 的FormWizard 控制器,而不是继承原始控制器(我们称之为Form 控制器)。从那里,我可以指定我希望 FormWizard 具有哪些操作,每个操作都能够呈现特定的视图。这是一个好方法吗?不过,如何将新的控制器/视图链接到表单的模型? @apneadiving 在将 FormWizard 控制器和视图链接到 Form 模型方面,我认为这就像在 FormWizard 控制器中创建一个实例变量并让它通过 Active Record 拉取和推送数据一样简单。 这是一种继续的方式,但我不确定是否需要这样做,原因有两个:1) 通常向导不会在两页之间保存模型,而只会在表单末尾保存,这是他们的目的和截屏视频成功演示了它 2) 一个向导应该只有一个 url。否则,您正在编写一个多页表单,这也很好:) @apneadiving 视频不是我想要做的。我的项目有一个两页的表格。我的目标是在网站上创建一个向导部分,将用户带到相同的表单,但带有工具提示,引导用户浏览整个表单。当用户在向导中输入信息时,它仍然将数据保存到数据库中,就好像他们正在填写原始表单(没有向导/工具提示)。唯一改变的是视图(javascript 交互性,CSS)。那有意义吗?我感谢任何反馈或建议。 好的,知道了。好吧,为每个页面创建操作和视图,并尽可能在 wizzarf 和正常形式之间重构:)以上是关于Rails - 相同的模型/控制器,但不同的视图的主要内容,如果未能解决你的问题,请参考以下文章