Ассоциация между владельцем пользователя и гостями в рельсах - PullRequest
0 голосов
/ 20 мая 2018

Пользователь - Пользователь сайта.Если Пользователь создаст страницу на веб-сайте, то пользователь, который создает страницы, станет владельцем этой конкретной страницы.Пользователь может отправить приглашение другому пользователю присоединиться к его странице.Если пользователь присоединится к странице другого пользователя, то этот пользователь, который присоединится к странице, станет гостем для этой страницы.

Поэтому, пожалуйста, помогите мне спроектировать базу данных для вышеуказанной модели.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

у вас будет 3 модели: User, Pages, Member.Миграции могут быть следующими:

Миграции

# Generate the model User
be rails g model user email:string
# Generate the model Page
be rails g model page title:string user:references
# Generate the model Member
be rails g model member user:references page:references

Отношения

class User < ApplicationRecord
  has_many :pages, dependent: :destroy
  has_many :members
  has_many :memberships, through: :members, source: :page
end

class Page < ApplicationRecord
  belongs_to :owner, class_name: 'User', foreign_key: 'user_id'
  has_many :members, dependent: :destroy
  has_many :guests, through: :members, source: :user 
end

class Member < ApplicationRecord
  belongs_to :user
  belongs_to :page
end

Консоль

Вы можете попробовать протестировать ее в консоли:

user1 = User.create email: 'user1@test.com'
user2 = User.create email: 'user2@test.com'
user3 = User.create email: 'user3@test.com'

page1 = user1.pages.create title:'Page 1'
page1.members.create user:user2

page2 = user2.pages.create title:'Page 2'
page2.members.create user:user1
page2.members.create user:user3

page2.owner
#<User id: 2, email: "user2@test.com", created_at: "2018-05-20 11:03:10", updated_at: "2018-05-20 11:03:10">

page2.guests
#<ActiveRecord::Associations::CollectionProxy [#<User id: 1, email: "user1@test.com",..>, #<User id: 3, email: "user3@test.com",..]>

user2.memberships
#<ActiveRecord::Associations::CollectionProxy []>

Я надеюсь, что помог вам, это разные подходы, многое зависит от вашей бизнес-логики и предметной области.Rails очень гибок и хорошо документирован.Я рекомендую вам проверить:

0 голосов
/ 20 мая 2018

Будет три модели, одна для Пользователя, другая для страниц Сайта, созданных пользователем, а третья будет хранить информацию о гостях, посещающих страницы.

Ниже приведено описание высокого уровня между пользователем, website_page и website_guest.Пожалуйста, добавьте спецификации в базу данных, которые необходимы в приложении.

User 
has_many :website_pages, dependent: :destroy
 has_many :website_guest, through: :website_pages


Website_pages   #user_id (will be the owner)
belongs_to :user
has_many: website_guests, dependent: :destroy

Website_Guests   #website_id (will reference the website page) , guest_id 
belongs_to :website_pages
belongs_to :user, foreign_key: :guest_id

Надеюсь, это поможет !!

...