Много ко многим и один ко многим, связь между одними и теми же моделями

Я создаю простое приложение Sinatra, используя Sequel для своего ORM. Большая часть данных вращается вокруг пользователей и событий, где:

  • Событие может иметь много пользователей, один из которых является "владельцем".
  • У пользователей может быть много событий, одно или много из которых они "владеют".

Вот упрощенная версия моих определений схемы / модели:

class User < Sequel::Model(:users)
  many_to_many :events
  one_to_one :event
end

class Event < Sequel::Model(:events)
  many_to_many :users
  many_to_one :user
end

# provides a link between users and events
# e.g. event.users or user.events
# I am unsure how necessary this is :)
db.create_table :events_users do
  primay_key :id
  foreign_key :event_id, :events
  foreign_key :user_id, :users
end

Это позволяет мне привязать пользователей к событию или к событиям, к которым присоединен пользователь, но я изо всех сил пытаюсь выразить "право собственности" на событие. Кажется, что следующий псевдокод будет работать:

my_user = User.all.first
owned_events = Event.where(user_id = my_user.user_id)

Это приводит к двум вопросам:

  1. Имеет ли смысл то, как я сейчас использую ассоциации?
  2. Как я могу выразить право собственности на событие с точки зрения модели ассоциации сиквела?

1 ответ

Решение

Может быть, что-то вроде этого:

class Event
  many_to_one :owner, :class=>:User
  many_to_many :users
end

class User
  one_to_many :owned_events, :class=>:Event, :key=>:owner_id
  many_to_many :events
end

Вам нужно будет добавить owned_id поле в events Таблица.

Использование:

user = User.all.first
event = Event.new(:title => 'New Event')
events.add_owner(user)
event.save
another_user = User.create(:name => 'Jack')
event.add_user(another_user)
Другие вопросы по тегам