您将如何编写验证以检查一定数量的记录是否已经具有true
属性?
class BlogPost
scope :onStartpage, -> { where(onStartpage: true) }
validate :number_on_startpage
def number_on_startpage
return unless onStartpage?
errors.add(:foobar, 'foo') if Blog::Post.where(onStartpage: true).count > 3
end
end
就像上面的示例一样-我想确保将属性BlogPosts
设置为onStartpage
的三个true
。
但是它不起作用,因为当我要保存记录时,计数仍为2。由于计数过高,所有以后的更新都被拒绝。
答案 0 :(得分:2)
问题是,即使您只是想更改标题,也要检查您以前的博客文章的验证。
仅当onStartPage属性已更改时,您才可以检查验证。
此外,您可以将条件更改为>=
,就好像您已经拥有3个具有该属性的文章,严格来说3并不优于3 ...因此只有在您拥有4个文章之后,它才会返回false onStartpage设置为true。
class BlogPost
scope :onStartpage, -> { where(onStartpage: true) }
validate :number_on_startpage
def number_on_startpage
return unless onStartpage_changed?
errors.add(:foobar, 'foo') if Blog::Post.where(onStartpage: true).count >= 3
end
end