Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save saroar/1facd5dffdb057983f528cdd3fb6e385 to your computer and use it in GitHub Desktop.
Save saroar/1facd5dffdb057983f528cdd3fb6e385 to your computer and use it in GitHub Desktop.
class CreateProjects < ActiveRecord::Migration[5.0]
def change
create_table :projects do |t|
t.string :name
t.timestamps
end
end
end
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
def change
create_table :users do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.string :login
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
class CreateTasks < ActiveRecord::Migration[5.0]
def change
create_table :tasks do |t|
t.string :title
t.string :description
t.integer :status, default: 0
t.integer :reviewer_id, foreign_key: true
t.integer :project_id, foreign_key: true
t.timestamps
end
end
end
class CreateProjectUsers < ActiveRecord::Migration[5.0]
def change
create_table :project_users do |t|
t.references :user, foreign_key: true
t.references :project, foreign_key: true
t.timestamps
end
end
end
class CreateTaskPerformers < ActiveRecord::Migration[5.0]
def change
create_table :task_performers do |t|
t.references :user, foreign_key: true
t.references :task, foreign_key: true
t.boolean :done, default: false
t.timestamps
end
end
end
class Project < ApplicationRecord
has_many :tasks
has_many :project_users
has_many :users, through: :project_users
end
class ProjectUser < ApplicationRecord
belongs_to :user
belongs_to :project
end
class Task < ApplicationRecord
belongs_to :project
belongs_to :reviewer, class_name: User
has_many :task_performers
has_many :performers, through: :task_performers, class_name: User
end
class TaskPerformer < ApplicationRecord
belongs_to :performer, class_name: User, foreign_key: :user_id
belongs_to :task
end
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :project_users
has_many :projects, through: :project_users
has_many :tasks, :foreign_key => :reviewer
has_many :task_performers
has_many :tasks, through: :performers, class_name: Task
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment