Skip to content

Instantly share code, notes, and snippets.

@richardsondx
Forked from pam-/rails_console_sandbox
Last active August 29, 2015 14:06
Show Gist options
  • Save richardsondx/a5ca17efdc7a5066e556 to your computer and use it in GitHub Desktop.
Save richardsondx/a5ca17efdc7a5066e556 to your computer and use it in GitHub Desktop.
me = User.create(*all the info*)
ruby = Language.create(name: 'ruby')
python = Language.create(name: 'python')
UsersLanguage.add_language(python, me)
=> true
UsersLanguage.add_language(ruby, me)
=> true
me.languages.include?(python)
=> true
me.languages.include?(ruby)
=> false
me
=> #<User id: 3, name: "pam", email: "[email protected]", encrypted_password: "$2a$10$Yoow.zTaPTde1zphr88I5OG5YTdUvokXxCEr5UOC0M5...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2014-09-07 23:32:55", updated_at: "2014-09-07 23:32:55", location: "paris", admin: false>
ruby = Language.create(name: 'ruby')
(0.2ms) SAVEPOINT active_record_1
Language Exists (0.6ms) SELECT 1 AS one FROM "languages" WHERE "languages"."name" = 'ruby' LIMIT 1
SQL (0.4ms) INSERT INTO "languages" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", "2014-09-07 23:33:13.571860"], ["name", "ruby"], ["updated_at", "2014-09-07 23:33:13.571860"]]
(0.2ms) RELEASE SAVEPOINT active_record_1
=> #<Language id: 5, name: "ruby", created_at: "2014-09-07 23:33:13", updated_at: "2014-09-07 23:33:13">
UsersLanguage.create(user_id: me.id, language_id: ruby.id)
(0.2ms) SAVEPOINT active_record_1
UsersLanguage Exists (0.6ms) SELECT 1 AS one FROM "users_languages" WHERE ("users_languages"."language_id" = 5 AND "users_languages"."user_id" = 3) LIMIT 1
SQL (0.3ms) INSERT INTO "users_languages" ("created_at", "language_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", "2014-09-07 23:33:41.210579"], ["language_id", 5], ["updated_at", "2014-09-07 23:33:41.210579"], ["user_id", 3]]
(0.1ms) RELEASE SAVEPOINT active_record_1
=> #<UsersLanguage id: 5, user_id: 3, language_id: 5, level: nil, created_at: "2014-09-07 23:33:41", updated_at: "2014-09-07 23:33:41">
me.languages
Language Load (0.4ms) SELECT "languages".* FROM "languages" INNER JOIN "users_languages" ON "languages"."id" = "users_languages"."language_id" WHERE "users_languages"."user_id" = $1 [["user_id", 3]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Language id: 5, name: "ruby", created_at: "2014-09-07 23:33:13", updated_at: "2014-09-07 23:33:13">]>
python = Language.create(name: 'python')
(0.3ms) SAVEPOINT active_record_1
Language Exists (0.3ms) SELECT 1 AS one FROM "languages" WHERE "languages"."name" = 'python' LIMIT 1
SQL (0.3ms) INSERT INTO "languages" ("created_at", "name", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["created_at", "2014-09-07 23:34:12.267952"], ["name", "python"], ["updated_at", "2014-09-07 23:34:12.267952"]]
(0.2ms) RELEASE SAVEPOINT active_record_1
=> #<Language id: 6, name: "python", created_at: "2014-09-07 23:34:12", updated_at: "2014-09-07 23:34:12">
UsersLanguage.create(user_id: me.id, language_id: python.id)
(0.3ms) SAVEPOINT active_record_1
UsersLanguage Exists (0.7ms) SELECT 1 AS one FROM "users_languages" WHERE ("users_languages"."language_id" = 6 AND "users_languages"."user_id" = 3) LIMIT 1
SQL (0.5ms) INSERT INTO "users_languages" ("created_at", "language_id", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id" [["created_at", "2014-09-07 23:34:19.900723"], ["language_id", 6], ["updated_at", "2014-09-07 23:34:19.900723"], ["user_id", 3]]
(0.2ms) RELEASE SAVEPOINT active_record_1
=> #<UsersLanguage id: 6, user_id: 3, language_id: 6, level: nil, created_at: "2014-09-07 23:34:19", updated_at: "2014-09-07 23:34:19">
me.languages
=> #<ActiveRecord::Associations::CollectionProxy [#<Language id: 5, name: "ruby", created_at: "2014-09-07 23:33:13", updated_at: "2014-09-07 23:33:13">]>
#user.rb
class User < ActiveRecord::Base
has_many :users_languages
has_many :languages, through: :users_languages, foreign_key: :user_id
end
#language.rb
class Language < ActiveRecord::Base
has_many :users_languages
has_many :users, through: :users_languages, foreign_key: :language_id
end
#users_language.rb
class UsersLanguage < ActiveRecord::Base
belongs_to :user
belongs_to :language
def self.add_language(language, user) #add the language to the user
unless UsersLanguage.exists?(language_id: language.id, user_id: user.id)
transaction do
create!(language_id: language.id, user_id: user.id)
end
else
return 'failed'
end
end
end
require 'rails_helper'
describe UsersLanguage do
let(:user) { FactoryGirl.create(:user) }
let(:ruby) { FactoryGirl.create(:language) }
let(:python) { FactoryGirl.create(:language, name: 'Python') }
describe ".create" do
context "without a user id" do
before { UsersLanguage.create }
it { should_not be_valid }
end
end
describe ".add_language" do
before do
UsersLanguage.add_language(ruby, user)
UsersLanguage.add_language(python, user)
end
it "should add ruby to the user's languages" do
expect(user.languages).to include(ruby)
end
it "should add more than one language to the user's languages" do
expect(user.languages).to include(python && ruby)
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment