10. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
end
11. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
end
CREATE TABLE "people" ("id" SERIAL NOT NULL,
"name" VARCHAR(50) NOT NULL,
"age" INTEGER, PRIMARY KEY("id"))
12. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
has n, :addresses, :constraint => :destroy!
end
13. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
has n, :addresses, :constraint => :destroy!
end
ALTER TABLE addresses
ADD CONSTRAINT addresses_person_id_fk
FOREIGN KEY (person_id)
REFERENCES people ON DELETE CASCADE ON UPDATE CASCADE
15. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
end
16. class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
property :age, Integer
end
person = Person.create
person.errors => #<DataMapper::Validations::ValidationErrors:0x101d217a0
@errors={:name=>["Name must not be blank"]},
@resource=#<Person @id=nil @name=nil @age=nil>>
26. people = Person.all
people.each do |person|
p person.addresses
end
SELECT "id", "name" FROM people;
SELECT "id", "street" FROM addresses WHERE ("person_id" IN (1,2,3))
29. Person.all(:addresses => {:street.like => "%street%"})
SELECT "people"."id", "people"."name", "people"."age" FROM "people"
INNER JOIN "addresses" ON "people"."id" = "addresses"."person_id"
WHERE "addresses"."street" LIKE '%street%'
GROUP BY "people"."id", "people"."name", "people"."age"
ORDER BY "people"."id"
30. class Person
include DataMapper::Resource
...
def self.named_like_me
all(:name.like => "%me%")
end
end
31. class Person
include DataMapper::Resource
...
def self.named_like_me
all(:name.like => "%me%")
end
end
Person.named_like_me.all(:age.gt => 27)
~ SELECT "id", "name", "age" FROM "people"
WHERE ("name" LIKE '%me%' AND "age" > 27) ORDER BY "id"
33. Person.all(:name.like => '%me%').addresses.all(:street.not => nil)
SELECT "id", "street", "person_id" FROM "addresses"
WHERE (
"person_id" IN (SELECT "id" FROM "people" WHERE "name" LIKE '%me%')
AND "street" IS NOT NULL
) ORDER BY "id"
40. module DataMapper
module Adapters
class MyStorageAdapter < AbstractAdapter
def create(resources)
end
def read(query)
end
def update(attributes, collection)
end
def delete(collection)
end
end
end
end
42. class Address
include DataMapper::EmbeddedValue
property :street, String
end
class Person
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :addresses
end