gpt4 book ai didi

ruby-on-rails-3 - Ruby 数据建模 has_many 关系两种方式

转载 作者:行者123 更新时间:2023-12-04 06:55:43 26 4
gpt4 key购买 nike

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

用户可以创建多个Workshop

用户可以参加很多工作坊

工坊只有一个所有者(用户)

Workshop 有很多参加者(用户)

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

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

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

但是我将如何建立从研讨会到用户的“other has_many”关系。我可以做一些像 belongs_to :user, :as :owner 这样的工作坊吗?和一个研讨会 has_many :users, :as :attendees?

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

谢谢,丹尼尔

最佳答案

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

创建数据库迁移:

rails g model attendance

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

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 的所有用户。

关于ruby-on-rails-3 - Ruby 数据建模 has_many 关系两种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11231486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com