Dbi oraz sqlite3

Temat nie do końca dotyczy railsów ale rubiego. Mam za zadanie napisać program który będzie przechowywał w bazie danych jakieś rekordy. Mam użyć dbi oraz active_rocord, na slajdach wykładowca podał tylko tyle

[code=“ruby”]require ‘dbi’
require ‘active_record’
db = DBI.connect(“DBI:SQLite3:test.db”)

class Notepad < ActiveRecord::Base
has_many :entrys
end

class Entry < ActiveRecord::Base
belongs_to :notepad
@email
@name
@gg
end

notepad1 = Notepad.create[/code]
właśnie dzięki active_record możemy skorzystać z normalniej składni rubiego zamiast poleceń bazodanowych. Jednak to nie działa, nie jest to dla mnie zaskoczeniem ponieważ przed połączeniem z bazą danych wypadało by ją posiadać. Tu pojawia się moje pytanie jak ją stworzyć ? nie znalazłem w internecie dobrych wskazówek. Proszę o jakąś podpowiedź bądź stronę z opisem jak to zrobić.

Po pierwsze nie mam pojęcia po co używać DBI razem z ActiveRecordem. DBI to interfejs do obsługi bazy danych, którego można używać oddzielnie, a ActiveRecord to ORM, który DBI w żaden sposób nie używa. Jeżeli nie jesteś zmuszony do użycia activerecordu (pogadaj z wykładowcą, może się zgodzi na coś innego), to do takich małych skryptów standalone ja bym użył DataMappera. W Datamapperze definicje pól trzymasz w modelu i masz metodę auto_migrate, dzięki czemu nie musisz się martwić o migracje.

A wracając do Twojego skryptu. Jeżeli używasz activerecorda i sqlite3, to nie musisz się martwić o stworzenie bazy, będzie to zrobione automatycznie. To czym musisz się martwić to stworzenie struktury. Można by oczywiście napisać kilka “create table” w czystym SQLu, ale nie po to się używa ORMa, żeby się w to bawić :wink:

[code]require ‘rubygems’
require ‘active_record’

tutaj tworzymy połączenie z bazą, która będzie zapisana w pliku db.sqlite

ActiveRecord::Base.establish_connection(
:adapter => “sqlite3”,
:database => “db.sqlite”
)

uruchamiamy migracje z katalogu migrations

ActiveRecord::Migrator.migrate File.expand_path("…/migrations", FILE)

class Notepad < ActiveRecord::Base
has_many :entries
end

class Entry < ActiveRecord::Base
belongs_to :notepad
end

notepad1 = Notepad.create[/code]
Przy takim kodzie wystarczy teraz, że wrzucisz migracje do katalogu migrations i wszystko powinno śmigać, np:

# ./migrations/1_create_notepads.rb class CreateNotepads < ActiveRecord::Migration def self.up create_table :notepads do |t| t.string :title t.text :description end end end
Jeżeli będziesz potrzebował jakichś prostych tasków do zarządzania migracjami, to przestudiuj metody w ActiveRecord::Migrator: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/migration.rb#L516

np. można by zrobić coś takiego:

[code]# Rakefile
require ‘active_record’

task :“db:migrate” do
ActiveRecord::Migrator.migrate File.expand_path("…/migrations", FILE)
end

task :“db:migrate:down” do
ActiveRecord::Migrator.down File.expand_path("…/migrations", FILE)
end[/code]

trochę namieszałem w moim pytaniu bo złe zrozumiałem te slajdy ;p ale twoja odpowiedź świetnie pasuje do mojego problemu, dzięki :wink: