Rails - Letkion III

Transcription

Rails - Letkion III
Ruby on Rails
Lektion III
Inhalt
●
Migrationen
●
Rails-Console / ActiveRecord Query-Interface
●
Erstellung eines Datensatzes
–
●
Suchen eines Datensatzes
–
●
new, save
where, all, find
Validierung
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
2/10
Migrationen
●
Datenbankmanipulation
●
Domain Specific Language (DSL)
●
=> Unabhängig vom DBMS
●
Migrationen enthalten
–
Hilfsmethoden zur Manipulation von
●
●
●
–
●
Tabellen
Spalten
Indizes
Zusicherungen
Verzeichnis: db/migrate
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
3/10
Migrationen
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :login
t.string :name
t.string :email
t.string :password
t.timestamps
end
add_index :users, [:login, :email], unique: true
end
end
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
4/10
Migrationen
●
●
Migrationen ausführen
$ rake db:migrate
Ausgabe:
$ rake db:migrate
== 20140828092230 CreateUsers: migrating===============
-- create_table(:users)
-> 0.0026s
-- add_index(:users, [:login, :email], {:unique=>true})
-> 0.0005s
== 20140828092230 CreateUsers: migrated (0.0032s)======
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
5/10
Rails-Console
●
●
●
IRB mit Rails Environment
Starten:
$ rails console
Datenbankzugriff testen (ohne Validierung)
2.1.2 :001 > User.count
=> 0
2.1.2 :002 > u = User.new
=> #<User id: nil, login: nil, name: nil, email: nil,
password: nil, created_at: nil, updated_at: nil>
2.1.2 :003 > u.name = "fate"
=> "fate"
2.1.2 :004 > u.email = "fate@primus-fatum.de"
=> "fate@primus-fatum.de"
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
6/10
Rails-Console
2.1.2 :005 > u.save
(0.2ms) begin transaction
SQL (4.3ms) INSERT INTO "users" ("created_at",
"email", "name", "updated_at") VALUES (?, ?, ?, ?)
[["created_at", Fri, 09 Aug 2013 17:16:43 UTC +00:00],
["email", "fate@primus-fatum.de"], ["name", "fate"],
["updated_at", Fri, 09 Aug 2013 17:16:43 UTC +00:00]]
(53.0ms) commit transaction
=> true
2.1.2 :006 > User.count
(0.2ms) SELECT COUNT(*) FROM "users"
=> 1
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
7/10
ActiveRecord: Query-Interface
●
where / all / find
2.1.2 :001 > User.where name: 'fate'
=> #<ActiveRecord::Relation [#<User id: 1, login: nil,
name: "fate", email: "fate@primus-fatum.de", password:
nil, created_at: "2014-08-28 09:33:22", updated_at:
"2014-08-28 09:33:22">]>
2.1.2 :002 > User.all.size
=> 1
2.1.2 :003 > User.find(1)
=> #<User id: 1, login: nil, name: "fate", email:
"fate@primus-fatum.de", password: nil, created_at:
"2014-08-28 09:33:22", updated_at: "2014-08-28
09:33:22">
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
8/10
Validierung
class User < ActiveRecord::Base
validates :email, presence: true
validates :password, length: { in: 6..20 }
end
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
9/10
Validierung testen
2.1.2 :001 > u=User.new
=> #<User id: nil, login: nil, name: nil, email: nil,
password: nil, created_at: nil, updated_at: nil>
2.1.2 :002 > u.save
(0.2ms) begin transaction
(0.2ms) rollback transaction
=> false
2.1.2 :003 > u.errors
=> #<ActiveModel::Errors:0x000000019fdc50 @base=#<User
id: nil, login: nil, name: nil, email: nil, password:
nil, created_at: nil, updated_at: nil>,
@messages={:email=>["can't be blank"], :password=>["is
too short (minimum is 6 characters)"]}>
31.08.14 12:51
CS2320 - Ruby on Rails SS2014 - RoR III
10/10