3

我有一个关于 Ruby 中某个数据模型的问题。我有一组业务需求:

用户可以创建许多研讨会

用户可以参加许多研讨会

车间有一个所有者(用户)

研讨会有许多参加者(用户)

这种关系的第一部分很容易建立:

#user.rb
class User < ActiveRecord::Base
    has_many :workshops
end

#workshop.rb
class Workshop < ActiveRecord::Base
    belongs_to :user
end

但是我将如何建立从研讨会到用户的“其他 has_many”关系。我可以做一些类似研讨会的事情 belongs_to :user, :as :owner。和一个研讨会 has_many :users, :as :attendees?

您对此有何看法?更糟糕的是,研讨会有参加者限制,所以我需要验证......

谢谢,丹尼尔

4

1 回答 1

3

你有一个 has_many 到 has_many 的关系,所以你需要创建一个新的关联表来关联这些关系(我们称之为出席):

创建数据库迁移:

rails g模型出勤率

然后在您的迁移中执行以下操作:

create_table :attendances do |t|
    t.integer :attendee_id
    t.integer :workshop_id
end

add_index :attendances, :attendee_id
add_index :attendances, :workshop_id
add_index :attendances, [:workshop_id, :attendee_id]

因此,现在您有一个表格,您可以在其中将许多与会者与许多研讨会相关联。

现在在您的用户模型中:

has_many :attending, through: :attendances, foreign_key: 'attendee_id', class_name: 'Workshop', source: :workshop

在您的车间模型中:

has_many :attendees, through: :attendances, class_name: 'User', source: :attendee    

所以现在 'some_user.attending' 将返回 some_user 正在参加的所有研讨会的 ActiveRecord 关系,而 'some_workshop.attendees' 将为您提供所有参加 some_workshop 的用户。

于 2012-06-27T20:37:59.567 回答