ruby在迭代器上引发异常

时间:2015-07-28 20:20:43

标签: ruby-on-rails ruby exception-handling nullpointerexception rubygems

以下函数可能返回null值,因此我想使用异常流程。有人可以指导我做正确的方法,因为现在我收到了错误。

  

语法错误,意外的keyword_else,期待keyword_end else

def value_from_table1(field, key)
    begin 
      @@connection.query("SELECT #{field} FROM table1 Where key = #{key}  ").each do |row|
        rescue Exception=>e
          puts e
        else 
          return row[field]
        end
    end
end

2 个答案:

答案 0 :(得分:0)

您正在将块传递给引入新范围的Enumerator#each,因此您需要将begin作为异常块的开头。

如果您还需要处理@@connection.query的例外情况,只需在rescue块.each之后添加do-endbegin隐含在方法体的开头。

答案 1 :(得分:0)

首先,从Exception中抢救总是一个坏主意,详见Why is it a bad style to `rescue Exception => e` in Ruby?

第二个开始救援块总是必须有一个结束,否则只能在之前的

之后
begin
  # ...
rescue StandardError => e 
  # ...
end

正如贾斯汀特纳在评论中已经说过的那样,只是将值传递给数据库,这样就容易进行SQL注入。您是否有任何理由不使用ActiveRecord但希望直接访问数据库?

总体而言,这段短代码存在很多问题,我建议您阅读http://guides.rubyonrails.org/以更好地了解正在发生的事情。