gpt4 book ai didi

Ruby 未定义的方法小写

转载 作者:数据小太阳 更新时间:2023-10-29 07:02:38 27 4
gpt4 key购买 nike

我在以下代码段中遇到异常。谁能告诉我我做错了什么,我该如何预防?

def self.find_by_data(data = {})
where(name_canonical: data['name'].downcase.gsub(/\s+/, ''),
fuel: data['fuel'],
trim_canonical: data['trim'].downcase.gsub(/\s+/, ''),
year: data['year']).first
end

异常(exception):

/Users/charlie/Documents/WIP/projectx/ar_models.rb:35:in `find_by_data': undefined method `downcase' for nil:NilClass (NoMethodError)ooooooooooooooooooooooooo| ETA:   0:00:00
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/relation/delegation.rb:36:in `block in find_by_data'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/associations/collection_proxy.rb:845:in `block in scoping'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/relation.rb:270:in `scoping'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/associations/collection_proxy.rb:845:in `scoping'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/relation/delegation.rb:36:in `find_by_data'
from /Users/charlie/Documents/WIP/projectx/ar_models.rb:132:in `create_or_assign_existing'
from /Users/charlie/Documents/WIP/projectx/app.rb:230:in `block (2 levels) in work'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/activerecord-4.0.0/lib/active_record/connection_adapters/abstract/connection_pool.rb:294:in `with_connection'
from /Users/charlie/Documents/WIP/projectx/app.rb:80:in `block in work'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:319:in `call'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:319:in `call_with_index'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:179:in `block (3 levels) in work_in_threads'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:326:in `with_instrumentation'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:177:in `block (2 levels) in work_in_threads'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:171:in `loop'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:171:in `block in work_in_threads'
from /Users/charlie/.rvm/gems/ruby-2.0.0-p0/gems/parallel-0.6.3/lib/parallel.rb:62:in `block (2 levels) in in_threads'

最佳答案

当您看到“undefined method ... for nil:NilClass”时,这意味着您有一个 nil 值,您正在尝试调用该方法。

在这种情况下,未定义诸如 data['name'] 之类的内容。

为了使它更加防弹:

data['name'].to_s.downcase.gsub(/\s+/, '')

这会将所有内容转换为字符串。 nil.to_s 默认是一个空字符串,所以它是安全的。

关于Ruby 未定义的方法小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18901961/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com