我正在关注此post并尝试在创建对象之前添加validate方法。我一直在undefined method
我在这里阅读这篇文章http://ruby-for-beginners.rubymonstas.org/了解ruby如何工作,但无法弄清楚为什么我会收到此错误。
http://api.rubyonrails.org/v5.1/classes/ActiveModel/Validations/ClassMethods.html#method-i-validate
如果我在ruby对象上调用new并通过验证保存,我需要对视频变量做什么才能得到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}}
答案 0 :(得分:1)
因为video
方法实际上并不存在于您的模型上,并且基于您关注的帖子实际上是一个引用,您应该只需将video
替换为self
。像这样:if self.reload.count&gt; = 9 errors.add(:base,“超过9个视频的视频限制”)结束让我知道这是否适合你!此致
新答案:
在你关注的帖子上,他们正在检查videos
作为关联,然后检查它的数量是否大于9。
它是如何工作的实际上是videos
引用的主对象没有存储到DB但它具有videos
关联,因此您可以检查它的长度/计数。
在您的情况下,如果您尝试在主对象(Video
)上执行此操作,您将收到一个无法找到的错误,因为它没有保留但只是实例化以及您的验证方法在create
之前调用。
这种方式是你想要实现的,它只是用于验证创建一些被引用的模型是合乎逻辑的,这些模型无法存储有超过9个视频。
希望它足够清楚?
此致