Ruby 同一模型之间的多对多和一对多关联
我正在创建一个简单的Sinatra应用程序,用于我的ORM。 大多数数据围绕用户和事件,其中:Ruby 同一模型之间的多对多和一对多关联,ruby,orm,sequel-gem,Ruby,Orm,Sequel Gem,我正在创建一个简单的Sinatra应用程序,用于我的ORM。 大多数数据围绕用户和事件,其中: 一个事件可以有多个用户,其中一个是“所有者” 用户可以有许多事件,其中一个或多个是他们“拥有的” 以下是我的模式/模型定义的简化版本: class User < Sequel::Model(:users) many_to_many :events one_to_one :event end class Event < Sequel::Model(:events) many
- 一个事件可以有多个用户,其中一个是“所有者”
- 用户可以有许多事件,其中一个或多个是他们“拥有的”
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
这就引出了两个问题:
也许是这样的:
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
您需要在events
表中添加owned\u id
字段
用法:
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)
谢谢你的回答,这似乎让我有了一部分的了解,但我在我的事件实例上得到了一个
add\u owner
的命名错误。我已经将owner\u 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)