Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
EBUBJOUFHSJUZ ITWSC
Slide 2
Slide 2 text
+BZ)BZFT !JBNWFSZ
Slide 3
Slide 3 text
JBNWFSZDPN
Slide 4
Slide 4 text
No content
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
JNNFSTJWFCPPUDBNQT DPOTVMUJOH XSJUJOH
Slide 7
Slide 7 text
No content
Slide 8
Slide 8 text
No content
Slide 9
Slide 9 text
EBUBJOUFHSJUZ
Slide 10
Slide 10 text
EBUBJOUFHSJUZ
Slide 11
Slide 11 text
EBUBJOUFHSJUZ
Slide 12
Slide 12 text
EBUBJOUFHSJUZ
Slide 13
Slide 13 text
USVTUZPVSEBUB
Slide 14
Slide 14 text
UIFEBUBT create_table :products do |t| t.string :description t.boolean :active t.decimal :price end
Slide 15
Slide 15 text
XIBUUIFTUBUF product = Product.all.sample product.description => ?
Slide 16
Slide 16 text
XIBUUIFTUBUF product = Product.all.sample product.description => “doge cannon”
Slide 17
Slide 17 text
XIBUUIFTUBUF product = Product.all.sample product.description => ‘’
Slide 18
Slide 18 text
XIBUUIFTUBUF product = Product.all.sample product.description => nil WOMP
Slide 19
Slide 19 text
XIBUUIFTUBUF product = Product.all.sample product.active => ?
Slide 20
Slide 20 text
XIBUUIFTUBUF product = Product.all.sample product.active => true
Slide 21
Slide 21 text
XIBUUIFTUBUF product = Product.all.sample product.active => false
Slide 22
Slide 22 text
XIBUUIFTUBUF product = Product.all.sample product.active => nil WAT
Slide 23
Slide 23 text
product = Product.new product.description.upcase NoMethodError: undefined method `upcase` for nil:NilClass
Slide 24
Slide 24 text
product = Product.new product.description.to_s.upcase
Slide 25
Slide 25 text
product.price * TAX_RATE NoMethodError: undefined method `*` for nil:NilClass
Slide 26
Slide 26 text
(product.price || 0) * TAX_RATE
Slide 27
Slide 27 text
XIBUJTOPUIJOH
Slide 28
Slide 28 text
DPOTUSBJOUT
Slide 29
Slide 29 text
t.string :description, null: false t.boolean :active, null: false t.decimal :price, null: false
Slide 30
Slide 30 text
USVTU
Slide 31
Slide 31 text
product = Product.new product.description.upcase => “KITTEH GOOGLEH EYES” &WFSZ 4JOHMF 5JNF
Slide 32
Slide 32 text
TFOTJCMF EFGBVMUT
Slide 33
Slide 33 text
TUSJOHT t.string :description, null: false, default: ‘’
Slide 34
Slide 34 text
CPPMFBOT t.boolean :active, null: false, default: false
Slide 35
Slide 35 text
EFDJNBMT t.decimal :price, null: false
Slide 36
Slide 36 text
NPBSDPOTUSBJOUT
Slide 37
Slide 37 text
TUSJOHT t.string :description, null: false, default: ‘’, limit: 100
Slide 38
Slide 38 text
EFDJNBMT t.boolean :active, null: false, scale: 2, precision: 5
Slide 39
Slide 39 text
VOJRVFOFTT
Slide 40
Slide 40 text
UIFEBUBT create_table :users do |t| t.string :email, null: false end
Slide 41
Slide 41 text
User.create(email: “
[email protected]
”) User.create(email: “
[email protected]
”) User.all => [#, #] who even are you???
Slide 42
Slide 42 text
validate :email, uniqueness: true
Slide 43
Slide 43 text
WBMJEBUJPOT EPOUDVUJU
Slide 44
Slide 44 text
robots.thoughtbot.com/the-perils-of-uniqueness-validations
Slide 45
Slide 45 text
JOEJDFT create_table :users do |t| t.string :email, null: false t.index :email, unique: true end
Slide 46
Slide 46 text
SFGFSFODJBM JOUFHSJUZ
Slide 47
Slide 47 text
UIFEBUBT create_table :purchases do |t| t.integer :product_id, null: false t.integer :user_id, null: false t.index %i(product_id, user_id), unique: true end
Slide 48
Slide 48 text
user = User.find(1) product = Product.find(1) Purchase.create(user: user, product: product) product.destroy Purchase.last => # _.product => nil but it dead???
Slide 49
Slide 49 text
dependent: :destroy dependent: :delete dependent: :delete_all
Slide 50
Slide 50 text
HSFBU VOUJMJUJTOU
Slide 51
Slide 51 text
user = User.find(1) product = Product.find(1) Purchase.create(user: user, product: product) product.delete Purchase.last => # WOMP
Slide 52
Slide 52 text
HFNJOTUBMMGPSFJHOFS create_table :purchases do |t| # … t.foreign_key :products, dependent: :delete t.foreign_key :users, dependent: :restrict end
Slide 53
Slide 53 text
No content
Slide 54
Slide 54 text
SBJMTSBJMT
Slide 55
Slide 55 text
CFDPOGJEFOU
Slide 56
Slide 56 text
BWPJECVHT
Slide 57
Slide 57 text
IBWFJOUFHSJUZ
Slide 58
Slide 58 text
bignerdranch.com/blog/coding-rails-with-data-integrity ! bignerdranch.com/blog/coding-rails-with-data-integrity-part-2 ! bignerdranch.com/blog/coding-rails-with-data-integrity-part-3 CMPHT
Slide 59
Slide 59 text
5IBOLT !JBNWFSZ