-
Notifications
You must be signed in to change notification settings - Fork 0
/
db_setup.rb
83 lines (73 loc) · 1.79 KB
/
db_setup.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
require 'bundler/setup'
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "db/lab4.sqlite3"
)
class CreateAuthorsMigration < ActiveRecord::Migration
def change
create_table :authors do |t|
t.string :name
t.string :surname
t.date :born
t.date :died
t.string :image_url
end
end
end
class CreateBooksMigration < ActiveRecord::Migration
def change
create_table :books do |t|
t.string :title
t.string :language
t.references :author
t.integer :published
t.string :image_url
end
end
end
class CreateGenresMigration < ActiveRecord::Migration
def change
create_table :genres do |t|
t.string :name
end
end
end
class CreateBooksGenresMigration < ActiveRecord::Migration
def change
create_table :books_genres, id: false do |t|
t.references :book
t.references :genre
end
add_index :books_genres, [:book_id,:genre_id], unique: true
end
end
class AddIndicesMigration < ActiveRecord::Migration
def change
end
end
unless ActiveRecord::Base.connection.table_exists? 'authors'
CreateAuthorsMigration.new.migrate(:up)
end
unless ActiveRecord::Base.connection.table_exists? 'books'
CreateBooksMigration.new.migrate(:up)
end
unless ActiveRecord::Base.connection.table_exists? 'genres'
CreateGenresMigration.new.migrate(:up)
end
unless ActiveRecord::Base.connection.table_exists? 'books_genres'
CreateBooksGenresMigration.new.migrate(:up)
end
AddIndicesMigration.new.migrate(:up)
unless defined?(Author)
class Author < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :author
has_and_belongs_to_many :genres
end
class Genre < ActiveRecord::Base
has_and_belongs_to_many :books
end
end