Skip to content

Instantly share code, notes, and snippets.

@shingara
Created December 24, 2008 11:07
Show Gist options
  • Save shingara/39657 to your computer and use it in GitHub Desktop.
Save shingara/39657 to your computer and use it in GitHub Desktop.
shingara@slick ~/data/perso/project/merb/oupsnow $ merb -i
Loading init file from /mnt/data/home_data/perso/project/merb/oupsnow/config/init.rb
Loading /mnt/data/home_data/perso/project/merb/oupsnow/config/environments/development.rb
~ Connecting to database...
~ Loaded slice 'MerbAuthSlicePassword' ...
~ Parent pid: 9989
~ Compiling routes...
~ Activating slice 'MerbAuthSlicePassword' ...
irb: warn: can't alias context from irb_context.
irb(main):001:0> Project.first
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
=> #<Project id=1 name="good project" description=<not loaded>>
irb(main):002:0> Project.first.tickets
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" IN (1)) ORDER BY "id"
=> [#<Ticket id=1 title="ok" description=<not loaded> project_id=1>]
irb(main):003:0> Project.first.tickets.first
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" IN (1)) ORDER BY "id"
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
=> #<Ticket id=1 title="ok" description=<not loaded> project_id=1>
irb(main):004:0> Project.first.tickets.first.title = 'ko'
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" IN (1)) ORDER BY "id"
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
=> "ko"
irb(main):005:0> Project.first.tickets.first.save
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" IN (1)) ORDER BY "id"
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
=> true
irb(main):006:0> Ticket.first
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
=> #<Ticket id=1 title="ok" description=<not loaded> project_id=1>
irb(main):007:0> Ticket.first.project
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
~ SELECT "id", "name" FROM "projects" WHERE ("id" IN (1)) ORDER BY "id"
=> #<Project id=1 name="good project" description=<not loaded>>
irb(main):008:0> Ticket.first.project.name = 'bad project'
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
~ SELECT "id", "name" FROM "projects" WHERE ("id" IN (1)) ORDER BY "id"
=> "bad project"
irb(main):009:0> Ticket.first.project.save
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
~ SELECT "id", "name" FROM "projects" WHERE ("id" IN (1)) ORDER BY "id"
=> true
irb(main):010:0> Ticket.first.project
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
~ SELECT "id", "name" FROM "projects" WHERE ("id" IN (1)) ORDER BY "id"
=> #<Project id=1 name="good project" description=<not loaded>>
irb(main):011:0> t = Ticket.first
~ SELECT "id", "title", "project_id" FROM "tickets" ORDER BY "id" LIMIT 1
=> #<Ticket id=1 title="ok" description=<not loaded> project_id=1>
irb(main):012:0> t.project.name = "bad project"
~ SELECT "id", "name" FROM "projects" WHERE ("id" IN (1)) ORDER BY "id"
=> "bad project"
irb(main):013:0> t.project
=> #<Project id=1 name="bad project" description=<not loaded>>
irb(main):014:0> t.project.save
=> true
irb(main):015:0> p = t.project
=> #<Project id=1 name="bad project" description=<not loaded>>
irb(main):016:0> p.save
=> true
irb(main):017:0> Project.first(:name => 'bad project')
~ SELECT "id", "name" FROM "projects" WHERE ("name" = 'bad project') ORDER BY "id" LIMIT 1
=> nil
irb(main):020:0> p = Project.first
~ SELECT "id", "name" FROM "projects" ORDER BY "id" LIMIT 1
=> #<Project id=1 name="good project" description=<not loaded>>
irb(main):021:0> p.tickets.first
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" IN (1)) ORDER BY "id"
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
=> #<Ticket id=1 title="ok" description=<not loaded> project_id=1>
irb(main):022:0> Ticket.first(:title => 'ko')
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("title" = 'ko') ORDER BY "id" LIMIT 1
=> nil
irb(main):023:0> p.tickets.first.title = 'ko'
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
=> "ko"
irb(main):024:0> p.tickets.first.save
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("project_id" = 1) ORDER BY "id" LIMIT 1
~ UPDATE "tickets" SET "title" = 'ko' WHERE ("id" = 1)
=> true
irb(main):025:0> Ticket.first(:title => 'ko')
~ SELECT "id", "title", "project_id" FROM "tickets" WHERE ("title" = 'ko') ORDER BY "id" LIMIT 1
=> #<Ticket id=1 title="ko" description=<not loaded> project_id=1>
class Project
include DataMapper::Resource
property :id, Serial
property :name, String, :nullable => false, :unique => true
property :description, Text
has n, :tickets
has n, :members
has n, :users, :through => :members
has n, :functions, :through => :members
after :destroy, :destroy_tickets
# Destroy all ticket depend on this project
# non needing when cascading come
def destroy_tickets
Ticket.all(:project_id => id).destroy!
end
end
class Ticket
include DataMapper::Resource
property :id, Serial
property :title, String, :nullable => false
property :description, Text
belongs_to :project
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment