我正在创建一个简单的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)
这导致两个问题:
答案 0 :(得分: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)