Adds JoinedUserActivity model to associate users to every activities they created
This commit is contained in:
parent
9a28dba9cb
commit
99747e3f2d
9 changed files with 63 additions and 3 deletions
|
|
@ -13,6 +13,10 @@ class Api::V1::ActivitiesController < ApplicationController
|
|||
def create
|
||||
activity = current_user.created_activities.build(activity_params)
|
||||
if activity.save
|
||||
JoinedUserActivity.create!(
|
||||
user_id: current_user.id,
|
||||
activity_id: activity.id
|
||||
)
|
||||
render json: activity, status: :created
|
||||
else
|
||||
render json: { errors: activity.errors }, status: :unprocessable_entity
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
class Activity < ApplicationRecord
|
||||
belongs_to :author, class_name: "User"
|
||||
|
||||
has_one :joined_user_activities
|
||||
has_one :user, :through => :joined_user_activities
|
||||
|
||||
validates :name, presence: true
|
||||
validates :author, presence: true
|
||||
end
|
||||
|
|
|
|||
4
app/models/joined_user_activity.rb
Normal file
4
app/models/joined_user_activity.rb
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
class JoinedUserActivity < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :activity
|
||||
end
|
||||
|
|
@ -5,5 +5,9 @@ class User < ApplicationRecord
|
|||
validates :password_digest, presence: true
|
||||
|
||||
has_many :created_activities, foreign_key: 'author_id', class_name: 'Activity', dependent: :destroy
|
||||
|
||||
has_many :joined_user_activities
|
||||
has_many :activities, :through => :joined_user_activities
|
||||
|
||||
has_secure_password
|
||||
end
|
||||
|
|
|
|||
10
db/migrate/20210429184439_create_joined_user_activities.rb
Normal file
10
db/migrate/20210429184439_create_joined_user_activities.rb
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class CreateJoinedUserActivities < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
create_table :joined_user_activities do |t|
|
||||
t.references :user
|
||||
t.references :activity
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
11
db/schema.rb
11
db/schema.rb
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2021_04_13_142821) do
|
||||
ActiveRecord::Schema.define(version: 2021_04_29_184439) do
|
||||
|
||||
create_table "activities", force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
|
|
@ -23,6 +23,15 @@ ActiveRecord::Schema.define(version: 2021_04_13_142821) do
|
|||
t.index ["name"], name: "index_activities_on_name"
|
||||
end
|
||||
|
||||
create_table "joined_user_activities", force: :cascade do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "activity_id"
|
||||
t.datetime "created_at", precision: 6, null: false
|
||||
t.datetime "updated_at", precision: 6, null: false
|
||||
t.index ["activity_id"], name: "index_joined_user_activities_on_activity_id"
|
||||
t.index ["user_id"], name: "index_joined_user_activities_on_user_id"
|
||||
end
|
||||
|
||||
create_table "users", force: :cascade do |t|
|
||||
t.string "email", null: false
|
||||
t.string "username", null: false
|
||||
|
|
|
|||
12
db/seeds.rb
12
db/seeds.rb
|
|
@ -2,11 +2,13 @@ User.delete_all
|
|||
User.reset_pk_sequence
|
||||
Activity.delete_all
|
||||
Activity.reset_pk_sequence
|
||||
JoinedUserActivity.delete_all
|
||||
JoinedUserActivity.reset_pk_sequence
|
||||
|
||||
10.times do |i|
|
||||
name = Faker::Name.first_name.downcase
|
||||
user = User.create! username: "#{name}", email: "#{name}@email.com", password: "azerty"
|
||||
puts "Created user ##{i} - #{user.username}"
|
||||
puts "Created USER ##{i} - #{user.username}"
|
||||
|
||||
2.times do
|
||||
activity = Activity.create!(
|
||||
|
|
@ -15,6 +17,12 @@ Activity.reset_pk_sequence
|
|||
description: Faker::Company.catch_phrase,
|
||||
author_id: user.id
|
||||
)
|
||||
puts "Created activity \"#{activity.name}\" for #{activity.client}"
|
||||
puts "Created ACTIVITY \"#{activity.name}\" for #{activity.client}"
|
||||
|
||||
joined_user_activity = JoinedUserActivity.create!(
|
||||
user_id: user.id,
|
||||
activity_id: activity.id
|
||||
)
|
||||
puts "Created ASSOCIATION ##{joined_user_activity.id}"
|
||||
end
|
||||
end
|
||||
11
test/fixtures/joined_user_activities.yml
vendored
Normal file
11
test/fixtures/joined_user_activities.yml
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||
|
||||
# This model initially had no columns defined. If you add columns to the
|
||||
# model remove the '{}' from the fixture names and add the columns immediately
|
||||
# below each fixture, per the syntax in the comments below
|
||||
#
|
||||
one: {}
|
||||
# column: value
|
||||
#
|
||||
two: {}
|
||||
# column: value
|
||||
7
test/models/joined_user_activity_test.rb
Normal file
7
test/models/joined_user_activity_test.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
require "test_helper"
|
||||
|
||||
class JoinedUserActivityTest < ActiveSupport::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue