每个块NoMethodError之后的Rails rescue / continue循环

时间:2014-07-26 16:56:49

标签: ruby-on-rails api loops rescue

我以下列方式检索一些API信息

fetch_api.each do |api|
  save_api = Record.new(name: api.name, height: api.height)
  save_api.save! 
end

大多数记录都会保存,没问题。但似乎有些人缺少身高和一些名字。这导致NoMethodError使用未定义的方法" height"或"名称"为nil:NilClass,打破循环。

如果单个记录没有价值,我不介意。如何在此之后继续循环?

我试过

if !save_api.save
  next
end

没有效果。 (编辑:也尝试在没有&#34的情况下保存;!")。每个区块似乎都不接受rescue。还有什么?

非常感谢

3 个答案:

答案 0 :(得分:0)

fetch_api.each do |api|
  if api.name && api.height
    save_api = Record.new(name: api.name, height: api.height)
  elsif api.name
    save_api = Record.new(name: api.name)
  elsif
    save_api = Record.new(height: api.height)
  end 
    save_api.save! 
end

我确信有一种更有说服力的方法可以做到,但我认为这样可行。你也可以使用一个更好的案例陈述,但我不想重写它。

答案 1 :(得分:0)

你可以这样做

Record.new do |record|
   if (record.respond_to?(:name) && record.respond_to?(:height)) 
   ...
end

答案 2 :(得分:0)

简单地这样做:

fetch_api.each do |api|
  save_api = Record.new(name: api && api.name, height: api && api.height)
  save_api.save
end