Skip to content

Instantly share code, notes, and snippets.

@petervandenabeele
Created October 11, 2011 10:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petervandenabeele/1277822 to your computer and use it in GitHub Desktop.
Save petervandenabeele/1277822 to your computer and use it in GitHub Desktop.
save user and associated referrals in one command
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ rails g model User
invoke active_record
create db/migrate/20111011103622_create_users.rb
create app/models/user.rb
invoke rspec
create spec/models/user_spec.rb
invoke factory_girl
create spec/factories/users.rb
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ rails g model Referral
invoke active_record
create db/migrate/20111011103641_create_referrals.rb
create app/models/referral.rb
invoke rspec
create spec/models/referral_spec.rb
invoke factory_girl
create spec/factories/referrals.rb
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ vim db/migrate//20111011103622_create_users.rb
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ cat db/migrate//20111011103622_create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.timestamps
end
end
end
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ vim db/migrate/20111011103641_create_referrals.rb
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ cat db/migrate/20111011103641_create_referrals.rb
class CreateReferrals < ActiveRecord::Migration
def change
create_table :referrals do |t|
t.references :user
t.string :comment
t.timestamps
end
end
end
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ rake db:migrate
== CreateUsers: migrating ====================================================
-- create_table(:users)
NOTICE: CREATE TABLE will create implicit sequence "users_id_seq" for serial column "users.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "users_pkey" for table "users"
-> 0.0304s
== CreateUsers: migrated (0.0305s) ===========================================
== CreateReferrals: migrating ================================================
-- create_table(:referrals)
NOTICE: CREATE TABLE will create implicit sequence "referrals_id_seq" for serial column "referrals.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "referrals_pkey" for table "referrals"
-> 0.0165s
== CreateReferrals: migrated (0.0166s) =======================================
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ rails c
Loading development environment (Rails 3.1.1.rc1)
001:0> u = User.new(:name => "Peter")
=> #<User id: nil, name: "Peter", created_at: nil, updated_at: nil>
002:0> r1 = u.referrals.build(:comment => "sailor")
=> #<Referral id: nil, user_id: nil, comment: "sailor", created_at: nil, updated_at: nil>
003:0> r2 = u.referrals.build(:comment => "developer")
=> #<Referral id: nil, user_id: nil, comment: "developer", created_at: nil, updated_at: nil>
004:0> u.save
(0.4ms) BEGIN
SQL (77.3ms) INSERT INTO "users" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00], ["name", "Peter"], ["updated_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00]]
SQL (1.0ms) INSERT INTO "referrals" ("comment", "created_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["comment", "sailor"], ["created_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00], ["updated_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00], ["user_id", 2]]
SQL (0.4ms) INSERT INTO "referrals" ("comment", "created_at", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["comment", "developer"], ["created_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00], ["updated_at", Tue, 11 Oct 2011 10:56:14 UTC +00:00], ["user_id", 2]]
(0.9ms) COMMIT
=> true
005:0> u
=> #<User id: 2, name: "Peter", created_at: "2011-10-11 10:56:14", updated_at: "2011-10-11 10:56:14">
006:0> r1
=> #<Referral id: 2, user_id: 2, comment: "sailor", created_at: "2011-10-11 10:56:14", updated_at: "2011-10-11 10:56:14">
007:0> r2
=> #<Referral id: 3, user_id: 2, comment: "developer", created_at: "2011-10-11 10:56:14", updated_at: "2011-10-11 10:56:14">
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ vim app/models/referral.rb # adding a validation that will fail on child
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ cat app/models/referral.rb
class Referral < ActiveRecord::Base
belongs_to :user
validates :comment, :presence => true
end
peterv@ASUS:~/b/rails-apps/apps/temp/base_app$ rails c
Loading development environment (Rails 3.1.1.rc1)
001:0> u2 = User.new(:name => "Jan")
=> #<User id: nil, name: "Jan", created_at: nil, updated_at: nil>
002:0> r1 = u2.referrals.build(:comment => "wanderer")
=> #<Referral id: nil, user_id: nil, comment: "wanderer", created_at: nil, updated_at: nil>
003:0> r2 = u2.referrals.build
=> #<Referral id: nil, user_id: nil, comment: nil, created_at: nil, updated_at: nil>
004:0> u2.save
(0.4ms) BEGIN
(0.4ms) ROLLBACK
=> false
005:0> User.find_by_name("Jan")
User Load (1.9ms) SELECT "users".* FROM "users" WHERE "users"."name" = 'Jan' LIMIT 1
=> nil
006:0> User.find_by_name("Peter")
User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."name" = 'Peter' LIMIT 1
=> #<User id: 2, name: "Peter", created_at: "2011-10-11 10:56:14", updated_at: "2011-10-11 10:56:14">
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment