Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 项目MVC结构的问题_Ruby On Rails_Ruby_Model View Controller - Fatal编程技术网

Ruby on rails 项目MVC结构的问题

Ruby on rails 项目MVC结构的问题,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,在我的项目中,我有大约20个html表单,其中包含许多不同的。这种在每种形式中都是唯一的,它们之间不会重复。对于每个表单,都有一个脚本,用于从表单获取数据、生成特定文件并将其推送到浏览器。就这样。没有数据库、管理员、登录/密码和其他常见的web应用程序内容 例如,在php中,项目结构可以是这样的: 形式/ ------->表格1/ --------------->index.html --------------->剧本/ ----------------------->index.php --

在我的项目中,我有大约20个html表单,其中包含许多不同的
。这种
在每种形式中都是唯一的,它们之间不会重复。对于每个表单,都有一个脚本,用于从表单获取数据、生成特定文件并将其推送到浏览器。就这样。没有数据库、管理员、登录/密码和其他常见的web应用程序内容

例如,在php中,项目结构可以是这样的:

形式/

------->表格1/

--------------->index.html

--------------->剧本/

----------------------->index.php

------->表格2/

--------------->index.html

--------------->剧本/

----------------------->index.php

等等。它非常清晰,可以创建漂亮的URL,如:

www.website.com/forms/form1


但是在RubyonRails中有一个MVC模式。我不知道如何组织这样的项目结构。如何使它正确?毕竟我不应该做20个不同的控制器,对吗?

是的,你做了20个控制器。与php结构中有20个script/index.php文件的方式大致相同。rails结构看起来像这样

app/ controllers/ form1s_controller form2s_controller ..... formns_controller view/ form1/ new.html.erb form2/ new.html.erb ...... formn/ new.html.erb layouts/ application.html.erb 应用程序/ 控制器/ form1s\u控制器 form2s_控制器 ..... formns_控制器 看法/ 表格1/ new.html.erb 表格2/ new.html.erb ...... formn/ new.html.erb 布局/ application.html.erb 其中控制器对您要执行的每个操作都有一个方法,例如新建、编辑等

layouts/application.html.erb
文件将包含所有页面上一致的标记


最后,不要试图与结构抗争。由于惯例,它可以启用最少的代码,如果您尝试创建自己的结构,您将创建一个痛苦的世界。

由于表单没有数据库后端,我将创建一个FormsController,包含20个方法(form1、form2、form3等)

然后,您的URL看起来几乎相同
\forms\form1
\forms\form2

即使要使用20个控制器,ruby中也有许多方法可以删除重复代码。因此,即使在普通的MVC中,我也有140个模型的应用程序,同样多的控制器,这些控制器中的大多数只有一行,并且视图是完全通用的


仅仅因为某个解决方案在PHP中看起来很简单,并不意味着没有更好的解决方案。比如说MVC。它似乎会产生更多的代码、更多的文件和更多的工作,但结构的存在是有充分理由的,它将关注点清晰地分开,每个文件本身变得更清晰和更容易理解。

如果我使用一个FormsController,我如何为每个表单实现脚本?这些“脚本”相当大,看起来每个“脚本”方法都将放在同一个FormsController中,对吗?或者有一种方法可以像在php中那样为每个“脚本”使用单独的文件?在MVC中,有一个模型可以收集需要显示或编辑的数据。控制器检索正确的模型,并将它们交给视图。视图可以操纵模型并以正确的方式显示它们。其目的是使观点尽可能简单。如果需要进行大型或复杂的操作来正确显示数据,我们将使用库、演示器或助手。从视图中,在提交时,用户输入数据将被发送回控制器进行处理。你能简单描述一下你的“剧本”是做什么的吗?所以我可以考虑一下,它的主要目标是根据表单输入的值,得到一个特殊的文本文件。我写了一个类来简化这种“特殊格式的文本文件”,叫做FileMaker。那么每一个脚本到底在做什么呢?它以
$filemaker=newfilemaker()开头
,然后从表单中获取所有值,并根据这些值在
$filemaker
中执行操作。例如,
if($\u GET['somecheckbox']==true?$filemaker->addProduct(“某些行”):$filemaker->addBlock(“某些块”)
。不可能用20个脚本制作一个大脚本。我想这就是为什么我们每个表单都需要控制器的原因。谢谢你的回答。在我看到的每个教程/视频中,大约只有3到4个控制器。我认为20个、30个或更多控制器只是项目组织得不好。所以,这很正常吗?大多数教程/视频都是这样我们本质上是在简化事情。你可能希望每个“区域”都有一个控制器无论是没有数据库支持的单个表单,还是封装应用程序特定区域的一组表单。只有您知道这一点,但肯定有许多ROR应用程序具有更多的控制器。例如,Redmine(ROR问题跟踪器)有40多个控制器