以下函数可能返回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
答案 0 :(得分:0)
您正在将块传递给引入新范围的Enumerator#each
,因此您需要将begin
作为异常块的开头。
如果您还需要处理@@connection.query
的例外情况,只需在rescue
块.each之后添加do-end
。 begin
隐含在方法体的开头。
答案 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/以更好地了解正在发生的事情。