Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型中的验证给出未定义的nil[]_Ruby On Rails_Ruby_Validation - Fatal编程技术网

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)