代码之家  ›  专栏  ›  技术社区  ›  Lee Eather

在创建新对象的验证中获得“undefined method”ruby on rails?

  •  0
  • Lee Eather  · 技术社区  · 9 年前

    我正在关注这个 post 并尝试在创建对象之前添加验证方法。我一直在 undefined method 'video' for #<Video:0xbe430a0> 我在这里读这篇文章 http://ruby-for-beginners.rubymonstas.org/

    http://api.rubyonrails.org/v5.1/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate

    undefined method ?

    class Video < ApplicationRecord
    
      validate :video_count_within_limit, on: :create
    
      def video_count_within_limit
        if video(:reload).count >= 9
          errors.add(:base, "Exceeded video limit of 9 videos")
        end
      end
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   zauzaj    9 年前

    video 方法实际上并不存在于您的模型中,根据您所关注的帖子,它实际上是一个引用,您应该简单地替换它 视频 self


    新答案:

    在你跟踪的邮件中,他们正在检查 videos

    它的工作原理实际上是,引用到 未存储到数据库,但它具有 关联,以便您可以检查其长度/计数。

    在你的情况下,如果你想在你的主要物体上这样做( Video )您将得到一个无法找到的错误,因为它没有持久化,只是实例化了,并且之前调用了验证方法 create

    按照您尝试实现的方式,只有在验证创建一些引用模型时才符合逻辑,因为这些模型无法存储超过9个视频。

    希望足够清楚?