【问题标题】:Rails: Is it improper to freak out during validation (with exceptions)?Rails:在验证期间惊慌失措(有例外)是不恰当的吗?
【发布时间】:2011-01-18 07:24:31
【问题描述】:

您有一个Lung 模型。在其中,您输入:

validates_presence_of :human_id

您应用的用户没有控制是否设置了human_id;应用程序应该会自动执行此操作。

如果:human_id 曾经在场,告诉他们“这个肺没有附在人身上”并不能帮助你的用户,因为你的用户将无法做任何事情。是时候让您的模型吓坏并抛出异常了吗?

您的模型是否应该关心给定验证错误的严重性?那是业务逻辑的一部分吗?模型是否应该在验证期间抛出异常,或者控制器是否应该负责解释模型中的“愚蠢”验证并为视图生成有用的数据?

编辑:如果这是可以接受的事情,是否有任何关于如何在模型验证期间引发异常的约定?

【问题讨论】:

    标签: ruby-on-rails validation model controller


    【解决方案1】:

    我将设置我的 ActiveRecord 迁移,以便 human_id 列不能是 null。这样,如果未设置,您无论如何都会得到异常。

    create_table :lungs do |t|
      t.integer :human_id, :null => false
      ...
    end
    

    【讨论】:

    • 这是否意味着我不会在我的模型中验证它?
    • 如果这不是用户可以做的任何事情,那么没有。
    • 我喜欢这种思考方式!
    【解决方案2】:

    我认为它应该作为一个例外提出。应用程序将在大多数情况下放置human_id,并且仅在特殊情况下可能不存在human_id,例如在后端制作的请求或定时注销。由于这些是例外情况,因此值得抛出异常而不是让控制器处理它。

    【讨论】:

      【解决方案3】:

      据我了解,验证不是检查这种模型一致性的正确位置。验证仅适用于用户生成的输入。

      问题是:如何在没有人类身份的情况下创建肺?如果答案只是通过编程顺序,您应该适当地修复该错误并为其创建一些测试用例。或者如果你真的想每次都检查它,你可以在 before_save 回调中检查它。

      【讨论】:

        猜你喜欢
        • 2020-06-24
        • 2020-12-18
        • 2021-11-03
        • 2021-11-23
        • 2020-03-25
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多