2011-12-04 47 views
0

我正在通过构建一个应用程序来练习我的Rails开发技能,该应用程序将为用户提供不同类型的练习。最可能的事情就像针对不同主题的多选题。Rails - 模型或控制器或其他地方的方法?

检查问题是否被正确回答的一种方法是在模型上使用验证。但是,我并不需要保存结果,并且最终可能会创建很多不同的模型,因为每个问题都会有自己的验证来检查每个答案。

是否为每个主题区域创建新的控制器操作?是

我还可以组织这个吗?

回答

0

http://www.enode.com/x/markup/tutorial/mvc.html

随着MVC模式,控制器通常在操纵由模型保持数据的控制。

将您的大部分逻辑保留在控制器中是一种很好的形式。我不确定你的新控制器操作是什么意思,但是你可能想要做的是在你的视图中设置某种形式(参见form_for),然后将其发送给控制器。控制器执行验证或任何你需要它做的事情。

这应该是有帮助的: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

因此,例如,你可能在你的视图(例如测验)形式,计算出用户在控制器得分,并保存为一个场用户在你的数据库中。

+0

谢谢,但如果我有20或30次测验,控制器变得非常笨重。然后,我是否将这些方法粘贴在助手中? – Leahcim

+0

助手用于不断重复的代码。所以不,你不会把它放在帮手里面。相反,你应该考虑有一个测验数据结构,由你的模型维护。字段的例子可能是“正确答案”。这样,如果你有一堆多选题测验,每个测验都可以在D.R.Y中验证。在你的控制器中很重要,而控制器不必知道哪些答案是正确的。 http://oldwiki.rubyonrails.org/rails/pages/DRY – varatis

+0

为了详细说明,在你的控制器中,你可能有一个check_correct_answers方法,它可以检查任何多项选择测验(通过从给定的测验中提取​​数据) – varatis

0

关于何处放置逻辑的辩论与涉及的模式本身一样古老。对于MVC,我决定问自己:

  • 是否涉及模型的逻辑必不可少的逻辑?
  • 模型(本身)在没有逻辑的情况下运行良好吗?
  • 模型是否对控制器有任何要求?
  • 如果我重新使用模型,我是否想要参与其中的业务逻辑,还是会妨碍它?

我的一般建议:将业务逻辑“低”(底部:分贝,然后模型,然后控制器,然后查看)尽量不违反任何的以下限制:

  • 身份验证和授权不属于观点。它可能是控制器的属性(处理会话和一般API访问规则等)或模型(授权:谁可以访问哪些内容?)
  • UI /显示/输入方法相关的东西没有进入型号或分贝。不要让你的模型/数据库决定是否以及如何呈现html,xml或json。
  • 数据一致性和完整性不在控制器/视图中。理想情况下,您的数据模型只接受有效数据,使用事务安全并向控制器报告失败或成功。理想情况下,一致性在db级别处理。
  • 模型应该可以与新项目中的其他控制器/视图重用(考虑切换到另一个web api)。太严重的约束可能会使其在新的情况下无法使用。
  • 可能还有更多......

而且一般情况下:如果有疑问,请投入控制器。 ;)

相关问题