0

ORM にSequelを使用して、単純な Sinatra アプリを作成しています。ほとんどのデータは、次のようなユーザーとイベントを中心に展開されます。

  • イベントには多くのユーザーを含めることができ、そのうちの 1 人が「所有者」です。
  • ユーザーは多くのイベントを持つことができ、そのうちの 1 つまたは多くを "所有" します。

これが私のスキーマ/モデル定義の簡略化されたバージョンです:

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)

これは、次の 2 つの疑問につながります。

  1. 私が関連付けを使用している現在の方法は理にかなっていますか?
  2. Sequel のアソシエーション モデルに関して、イベントの所有権をどのように表現すればよいですか?
4

1 に答える 1

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)
于 2014-07-28T07:52:27.630 に答える