【问题标题】:Rails - Same Model/Controller, but different ViewRails - 相同的模型/控制器,但不同的视图
【发布时间】:2011-05-02 22:04:53
【问题描述】:

我正在构建一个表单向导,引导用户完成已创建和部署的表单。模型和控制器应该保持不变,唯一改变的是视图(引导用户通过每个表单字段)。完成这项任务的最佳(如果可能,也是最简单的)方法是什么?

即使通过向导,一旦用户保存表单,它也会通过相同的模型和控制器保存到相同的数据库中。通过一些研究,这似乎可以通过明显地创建一个新视图,创建一个扩展原始控制器的简单控制器,并将新控制器路由到新视图来实现。

非常感谢任何建议。谢谢!

【问题讨论】:

    标签: ruby-on-rails model-view-controller view


    【解决方案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 和正常形式之间重构:)
      猜你喜欢
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2012-05-02
      • 2013-10-05
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多