我正在通过构建一个应用程序来练习我的Rails开发技能,该应用程序将为用户提供不同类型的练习。最可能的事情就像针对不同主题的多选题。Rails - 模型或控制器或其他地方的方法?
检查问题是否被正确回答的一种方法是在模型上使用验证。但是,我并不需要保存结果,并且最终可能会创建很多不同的模型,因为每个问题都会有自己的验证来检查每个答案。
是否为每个主题区域创建新的控制器操作?是
我还可以组织这个吗?
我正在通过构建一个应用程序来练习我的Rails开发技能,该应用程序将为用户提供不同类型的练习。最可能的事情就像针对不同主题的多选题。Rails - 模型或控制器或其他地方的方法?
检查问题是否被正确回答的一种方法是在模型上使用验证。但是,我并不需要保存结果,并且最终可能会创建很多不同的模型,因为每个问题都会有自己的验证来检查每个答案。
是否为每个主题区域创建新的控制器操作?是
我还可以组织这个吗?
http://www.enode.com/x/markup/tutorial/mvc.html
随着MVC模式,控制器通常在操纵由模型保持数据的控制。
将您的大部分逻辑保留在控制器中是一种很好的形式。我不确定你的新控制器操作是什么意思,但是你可能想要做的是在你的视图中设置某种形式(参见form_for),然后将其发送给控制器。控制器执行验证或任何你需要它做的事情。
这应该是有帮助的: http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
因此,例如,你可能在你的视图(例如测验)形式,计算出用户在控制器得分,并保存为一个场用户在你的数据库中。
关于何处放置逻辑的辩论与涉及的模式本身一样古老。对于MVC,我决定问自己:
我的一般建议:将业务逻辑“低”(底部:分贝,然后模型,然后控制器,然后查看)尽量不违反任何的以下限制:
而且一般情况下:如果有疑问,请投入控制器。 ;)
谢谢,但如果我有20或30次测验,控制器变得非常笨重。然后,我是否将这些方法粘贴在助手中? – Leahcim
助手用于不断重复的代码。所以不,你不会把它放在帮手里面。相反,你应该考虑有一个测验数据结构,由你的模型维护。字段的例子可能是“正确答案”。这样,如果你有一堆多选题测验,每个测验都可以在D.R.Y中验证。在你的控制器中很重要,而控制器不必知道哪些答案是正确的。 http://oldwiki.rubyonrails.org/rails/pages/DRY – varatis
为了详细说明,在你的控制器中,你可能有一个check_correct_answers方法,它可以检查任何多项选择测验(通过从给定的测验中提取数据) – varatis