【问题标题】:Rails: FakeModel runs the same validation too many timesRails:FakeModel 多次运行相同的验证
【发布时间】:2025-12-22 21:30:11
【问题描述】:

我们创建了一个继承自 Object 的 FakeModel 对象类, 允许使用没有数据库表的模型。

它具有常规 ActiveRecord 模型的基本功能。 我们还在类中添加了以下行:

include ActiveRecord::Validations

问题是这样的: 向控制器发送一个新请求,并创建一个继承自 FakeModel 类的新对象。 当该对象的验证运行时,它们会运行不止一次。 太具体了 - 每个请求都发送到服务器, 验证比上一个请求多运行一次。

我猜这里有些东西“粘”在服务器级别 (当然,当我重新启动服务器时,它会重置为只运行一次验证)

这可能是什么原因?

更新:

ActiveModel 解决方案对我来说是不可能的,因为我使用的是 Rails 2.3.8。我仍然需要弄清楚问题出在哪里。

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

    我建议你使用 ActiveModel 而不是从头开始编写自己的模型引擎,请参阅this blog post for a tutorial 你也可以观看this screencast

    【讨论】:

    • 谢谢,但 Rails 3 之前的版本不支持此功能。
    • 你是对的,你可以更新你的帖子告诉我们你使用的是哪个版本的 Rails。
    • 我认为人们相信这个问题已经得到解答。我该如何强调它没有..的事实?
    • 我只是编辑了您的帖子,以明确 ActiveModel 不是您的解决方案,它应该会有所帮助,但我们将不得不等待我的编辑被接受。
    • This post 可以帮助您为模型添加验证。
    【解决方案2】:

    我在这里刺痛了,但听起来每次加载/保存模型时都会包含验证。

    你能告诉我们你在哪里包含它吗?

    在 Hyperactive Resource 中,我们使用的不是 include:

    # make validations work just like ActiveRecord by pulling them in directly
    require "active_record/validations.rb"
    extend ActiveRecord::Validations::ClassMethods
    

    【讨论】: