Ruby 同一模型之间的多对多和一对多关联

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

我正在创建一个简单的Sinatra应用程序,用于我的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
这就引出了两个问题:

  • 我现在使用Associations的方式有意义吗
  • 我如何用Sequel的关联模型表示事件的所有权

  • 也许是这样的:

    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)