Przekazanie zmiennej db do metody SQLite3

Coam sobie działam w Rubym używając przy tym SQLite3 i natknąłem się na problem. Dlaczego otrzymuję taki błąd? Jak przekazać zmienną db z klasy Database do metody z klasy Profile?

require "sqlite3"

class Database
	def initialize
		begin
			 db = SQLite3::Database.open "test.db"
		   return db
		rescue SQLite3::Exception => e 
		    puts "Exception occurred"
		    puts e
		end
	end
end

class Profile < Database
	def get_friends
		query = db.prepare "SELECT * FROM `Friends`"
		result = query.execute 
	end
end

user = Profile.new
user.get_friends

/home/dawid/Desktop/Learning/Ruby/Projects/test2.rb:16:in <class:Profile>': undefined local variable or methoddb’ for Profile:Class (NameError)
from /home/dawid/Desktop/Learning/Ruby/Projects/test2.rb:15:in `’
[Finished in 0.1s with exit code 1]
[shell_cmd: ruby “/home/dawid/Desktop/Learning/Ruby/Projects/test2.rb”]
[dir: /home/dawid/Desktop/Learning/Ruby/Projects/]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]

Inicjalizujesz db jako zmienną lokalną w metodzie initialize, nie ma powodu, by była ona dostępna w innym kontekście. Zamiast tego, możesz np. zainitializować ją jako zmienną instancji i tak też jej używać.

class Database
  def initialize
    @db = SQLite3::Database.open 'test.db'
  rescue SQLite3::Exception => e
    puts 'Exception occurred'
    puts e
  end
end

class Profile < Database
  def get_friends
    query = @db.prepare 'SELECT * FROM `Friends`'
    query.execute
  end
end
1 Like