Ruby on rails 模型中的验证给出未定义的nil[]
我有以下代码,该代码正在对所有代码段内容进行验证,以根据常量检查字数,但我不断收到以下错误:Ruby on rails 模型中的验证给出未定义的nil[],ruby-on-rails,ruby,validation,Ruby On Rails,Ruby,Validation,我有以下代码,该代码正在对所有代码段内容进行验证,以根据常量检查字数,但我不断收到以下错误: undefined method `[]' for nil:NilClass Extracted source (around line #36): current_snippets_size = (self.book.get_word_count || 0) + word_count errors.add(:base, "Content size is too big") unless word_c
undefined method `[]' for nil:NilClass
Extracted source (around line #36):
current_snippets_size = (self.book.get_word_count || 0) + word_count
errors.add(:base, "Content size is too big") unless word_count < BOOK_SIZE[book_limit]['per'] && current_snippets_size < BOOK_SIZE[book_limit]['total']
end
编辑:Pry调试
31: def size_limit
=> 32: binding.pry
33: book_limit = self.book.size
34:
35: word_count = self.content.scan(/\w+/).size
36:
37: current_snippets_size = (self.book.get_word_count || 0) + word_count
38:
39: errors.add(:base, "Content size is too big") unless word_count < BOOK_SIZE[book_limit]['per'] && current_snippets_size < BOOK_SIZE[book_limit]['total']
40: end
[1] pry(#<Snippet>)> p book_limit
nil
=> nil
[2] pry(#<Snippet>)> p word_count
nil
=> nil
[3] pry(#<Snippet>)> errors.any?
=> false
[4] pry(#<Snippet>)> errors.blank?
=> true
我尝试过使用PRY,但我对调试方面还是新手,一些描述PRY调试最佳方式的文档将非常有用
谢谢。验证这些行是否总是返回值:
errors.add(:base, "book size is out of range") unless [0, 1, 2].include?(self.book.size)
书本限制=self.book.size
word\u count=self.content.scan/\w+/.size
如果是这样,他们可能会返回一个字符串对象,请将其发送到_i
书本限制=self.book.size.to\u i
word\u count=self.content.scan/\w+/.size.to\u i您是否使用PRY调试器检查了书本大小[BOOK\u limit]['per']和书本大小[BOOK\u limit]['total']?您是否尝试了def nil.[]*args;结束?我不明白你这是什么意思。你能解释一下吗?@ShaunFrostDukeJackson Mori在这里说的是,除非散列键是0、1或2,并且该对象存在,并获取对当前对象的引用,然后打印出来,这就是问题所在。我尝试了这种方法,但没有成功。哈希0,1,2已列在列大小中。列大小是字符串,因为它使用的集合是从表单中选择的。模型将其转换为0,1,2。需要显示每个代码段中的单词总数,而不仅仅是当前代码段。用户可以有许多代码片段。我如何检查控制台中的输出?使用调试工具我个人使用的pry或在rails c中从控制台调用model方法作为ModelName.action\u name使用p book\u limit和p word\u count在您的操作中了解它们返回的值。我更新了问题,我正在使用pry,但这是第一次使用它来调试。在单词\u count=self.content.scan/\w+/.size stmt之后定义binding.pry。只需检查book\u limit和word\u count variables是否返回正确的值,即使是当前的片段大小,错误也在最后一行。
31: def size_limit
=> 32: binding.pry
33: book_limit = self.book.size
34:
35: word_count = self.content.scan(/\w+/).size
36:
37: current_snippets_size = (self.book.get_word_count || 0) + word_count
38:
39: errors.add(:base, "Content size is too big") unless word_count < BOOK_SIZE[book_limit]['per'] && current_snippets_size < BOOK_SIZE[book_limit]['total']
40: end
[1] pry(#<Snippet>)> p book_limit
nil
=> nil
[2] pry(#<Snippet>)> p word_count
nil
=> nil
[3] pry(#<Snippet>)> errors.any?
=> false
[4] pry(#<Snippet>)> errors.blank?
=> true
errors.add(:base, "book size is out of range") unless [0, 1, 2].include?(self.book.size)