【问题标题】:Rails - Method in Model or Controller or somewhere else?Rails - 模型或控制器或其他地方的方法?
【发布时间】:2011-12-04 00:03:03
【问题描述】:

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

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

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

我还能如何组织这个?

【问题讨论】:

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


    【解决方案1】:

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

    在 MVC 模式下,控制器通常控制对模型保存的数据的操作。

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

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

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

    【讨论】:

    • 谢谢,但如果我有 20 或 30 个测验,控制器会变得非常笨重。然后我是否将方法粘贴在帮助程序中?
    • 助手用于不断重复的代码。所以不,你不会把它放在助手中。相反,您应该考虑使用由模型维护的测验数据结构。字段示例可能是“正确答案”。这样,如果您有一堆多项选择测验,则每个测验都可以在 D.R.Y. 中进行验证。重要的是您的控制器,而控制器不必知道哪些答案是正确的。 oldwiki.rubyonrails.org/rails/pages/DRY
    • 详细说明,在您的控制器中,您可能有一个 check_correct_answers 方法,它可以检查任何多项选择测验(通过从给定测验中提取​​数据)
    【解决方案2】:

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

    • 所涉及的逻辑对于模型是否必不可少?
    • 如果没有逻辑,模型(本身)能否正常运行?
    • 该型号是否对控制器没有任何要求?
    • 如果我要重用该模型,我是要沿用所涉及的业务逻辑还是会妨碍它?

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

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

    通常:如果有疑问,请输入控制器。 ;)

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多