rails 3 activerecord

58
ActiveRecord::Base Cur$s Schofield

Upload: blazing-cloud

Post on 10-May-2015

1.620 views

Category:

Technology


0 download

DESCRIPTION

Blazing Cloud Rails class. details on the 'rails generate model' command.

TRANSCRIPT

Page 1: Rails 3 ActiveRecord

ActiveRecord::Base

Cur$s  Schofield

Page 2: Rails 3 ActiveRecord

$ rails new ar_ex

Page 3: Rails 3 ActiveRecord

$ rails -v

3.0.3

Page 4: Rails 3 ActiveRecord

Edit Gemfile

Page 5: Rails 3 ActiveRecord

source 'http://rubygems.org' gem ‘rails’,‘3.0.3’ gem ‘rspec-rails’ gem ‘sqlite3-ruby’, :require => ‘sqlite’

Page 6: Rails 3 ActiveRecord

$ bundle

Page 7: Rails 3 ActiveRecord

$ rails g rspec:install

Page 8: Rails 3 ActiveRecord

$ rails g model Message body:text public_key:text

Page 9: Rails 3 ActiveRecord

invoke rspec

Page 10: Rails 3 ActiveRecord

create spec/models/message_spec.rb

Page 11: Rails 3 ActiveRecord

require 'spec_helper'

describe Message do pending "a class in itself"end

Page 12: Rails 3 ActiveRecord

invoke active_record

Page 13: Rails 3 ActiveRecord

create db/migrate/20110208201036_create_messages.rb

Page 14: Rails 3 ActiveRecord

class CreateMessages < ActiveRecord::Migration def self.up # rake db:migrate end def self.down # rake db:migrate:down VERSION=file_name # rake db:migrate:redo VERSION=file_name endend

Page 15: Rails 3 ActiveRecord

create_table :messages do |t| t.text :body t.text :public_key

t.timestamps end

rails g model Message body:text public_key:text

Page 16: Rails 3 ActiveRecord

drop_table :messages

Page 18: Rails 3 ActiveRecord

create app/models/message.rb

Page 19: Rails 3 ActiveRecord

class Message < ActiveRecord::Baseend

Page 20: Rails 3 ActiveRecord

Where are the methods?

Page 21: Rails 3 ActiveRecord

$ rails console

Page 22: Rails 3 ActiveRecord

> Message.new

Page 23: Rails 3 ActiveRecord

ActiveRecord::StatementInvalid:

Could not find table 'messages'

from /Users/o_o/.rvm/gems/ruby-1.9.2-p0@rails3/gems/activerecord-3.0.3/lib/active_record/connection_adapters/sqlite_adapter.rb:295:in `table_structure'

Page 24: Rails 3 ActiveRecord

every model has a corresponding database table

Page 25: Rails 3 ActiveRecord

$ rails db

Page 26: Rails 3 ActiveRecord

PRAGMA table_info(messages);

Page 27: Rails 3 ActiveRecord

nothing!

Page 28: Rails 3 ActiveRecord

.quit;

Page 29: Rails 3 ActiveRecord

$ rake db:migrate

Page 30: Rails 3 ActiveRecord

$ rails db

Page 31: Rails 3 ActiveRecord

PRAGMA table_info(messages);

Page 32: Rails 3 ActiveRecord

0|id|INTEGER|1||11|body|text|0||02|public_key|text|0||03|created_at|datetime|0||04|updated_at|datetime|0||0

Page 33: Rails 3 ActiveRecord

.quit

Page 34: Rails 3 ActiveRecord

$ rails console

Page 35: Rails 3 ActiveRecord

> Message.new

Page 36: Rails 3 ActiveRecord

=> #<Message id: nil, body: nil, public_key: nil, created_at: nil, updated_at: nil>

Page 37: Rails 3 ActiveRecord

>msg = Message.new>msg.body = 2>msg.save>msg

Page 38: Rails 3 ActiveRecord

=> #<Message id: 1, body: 2, public_key: nil, created_at: "2011-02-08 20:56:33", updated_at: "2011-02-08 20:56:33">

Page 39: Rails 3 ActiveRecord

> msg.body.class

Page 40: Rails 3 ActiveRecord

=> Fixnum

Page 41: Rails 3 ActiveRecord

> Message.find(1)

Page 42: Rails 3 ActiveRecord

=> #<Message id: 1, body: "2", public_key: nil, created_at: "2011-02-08 20:56:33", updated_at: "2011-02-08 20:56:33">

Page 43: Rails 3 ActiveRecord

> Message.find(1).body.class

Page 44: Rails 3 ActiveRecord

=> String

Page 45: Rails 3 ActiveRecord

> Message.find(1).updated_at.class

Page 46: Rails 3 ActiveRecord

=> ActiveSupport::TimeWithZone

Page 47: Rails 3 ActiveRecord

With Great Power Comes With Great Responsibility

Page 48: Rails 3 ActiveRecord

One more time..

Page 49: Rails 3 ActiveRecord

$ rails console

Page 50: Rails 3 ActiveRecord

> ActiveRecord::Base.logger=Logger.new($stdout)

Page 51: Rails 3 ActiveRecord

> Message.new.save

Page 52: Rails 3 ActiveRecord

SQL (0.3ms) SELECT name FROM sqlite_master WHERE type = 'table' AND NOT name = 'sqlite_sequence'

AREL (0.5ms) INSERT INTO "messages" ("body", "public_key", "created_at", "updated_at") VALUES (NULL, NULL, '2011-02-09 01:55:09.111181', '2011-02-09 01:55:09.111181')

Page 53: Rails 3 ActiveRecord

> exit

Page 54: Rails 3 ActiveRecord

Active Record Features

Page 55: Rails 3 ActiveRecord

validationshttp://apidock.com/rails/v3.0.0/ActiveModel/Validations

Page 56: Rails 3 ActiveRecord

before_save

http://apidock.com/rails/v3.0.0/ActiveRecord/Callbacks

Page 58: Rails 3 ActiveRecord

Understanding is free with practice - Without practice understanding cannot stand.