Rails - 模型或控制器中的方法或其他地方?

时间:2011-12-04 00:03:03

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

我正在通过构建一个为用户提供不同类型练习的应用程序来练习我的Rails开发技能。很可能是针对不同主题的多项选择问题。

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

是否可以为每个主题区域创建新的Controller操作?是

我还能如何组织这个?

2 个答案:

答案 0 :(得分:0)

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

使用MVC模式,控制器通常可以控制模型保存的数据。

将大部分逻辑保留在Controller中是一种很好的形式。我不确定你对一个新的Controller动作的意思,但是你可能想要做的是在你的View中设置某种形式(参见form_for)并将其激活给Controller。控制器会进行验证或您需要做的任何事情。

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

例如,您可能在视图中有一个表单(例如测验),在Controller中计算用户的分数,并将其保存为数据库中用户的字段。

答案 1 :(得分:0)

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

  • 逻辑是否对模型至关重要?
  • 模型(本身)在没有逻辑的情况下运行良好吗?
  • 模型是否对控制器没有任何要求?
  • 如果我重新使用该模型,我是否想要采用所涉及的业务逻辑,还是会阻碍它?

我的一般建议:将业务逻辑放在"低" (底部:db,然后是模型,然后是控制器,然后是视图)尽可能不违反以下任何约束:

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

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