2012-03-29 83 views
2

1)這兩個Ruby函數的實現有什麼區別?

require 'sqlite3' 

db = SQLite3::Database.new('development.sqlite3') 
db.results_as_hash = true; 


rows = db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ") 

rows do |row| 

    id_num = row['id'] 
    puts "Id = #{id_num}" 

    dupe_name = row['name'] 
    puts "name = #{dupe_name}" 

    dupe_tel = row['telephone'] 
    puts "tel = #{dupe_tel}" 

    dupe_lat = row['latitude'] 
    puts "lat = #{dupe_lat}" 

    dupe_long = row['longitude'] 
    puts "lat = #{dupe_long}" 
    puts '===end====' 



end 

2)

require 'sqlite3' 

db = SQLite3::Database.new('development.sqlite3') 
db.results_as_hash = true; 


db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ") do |row| 

    id_num = row['id'] 
    puts "Id = #{id_num}" 

    dupe_name = row['name'] 
    puts "name = #{dupe_name}" 

    dupe_tel = row['telephone'] 
    puts "tel = #{dupe_tel}" 

    dupe_lat = row['latitude'] 
    puts "lat = #{dupe_lat}" 

    dupe_long = row['longitude'] 
    puts "lat = #{dupe_long}" 
    puts '===end====' 



end 

第二屆一個工程和1號一個沒有。

這是爲什麼? db.execute函數不返回結果集。如果是的話,爲什麼你不能循環呢?

回答

4

您是否嘗試將rows do |row|更改爲rows.each do |row|作爲第一個函數?

第一個獲得一個集合並將它分配到rows。你需要爲之後的行創建一個迭代器來循環收集。

第二個函數,。 execute已經返回一個迭代器。

More on Iterators

+0

Aha。我現在明白了。非常感謝 – banditKing 2012-03-29 05:38:13