繁体   English   中英

我怎样才能使用户具有has_many个对象,但每个对象都可以属于许多用户?

[英]How can I make a user has_many objects but each object can belong_to MANY users?

我对Ruby还是很陌生,并开始为自己构建一个应用程序,以便我在旅途中学习。
抱歉,如果这是一个非常简单的问题,但是我似乎无法通过对关联的所有搜索来弄清楚。

由于我喜欢收集乙烯基,因此我希望建立一个用户可以在其中发布其乙烯基收藏的网站。 我从用户模型和乙烯模型之间的简单has_many / belongs_to关联开始。 我意识到,如果两个用户使用相同的乙烯基,那么第二个用户最好只是找到先前上传的乙烯基并将其添加到他们的收藏中(而不是在数据库中有一堆重复的唱片)。

经过一番搜索后,我决定了一个has_many:through关系,在这里我制作了一个名为collections的第三个模型,该模型具有:

belongs_to :user
belongs_to :vinyl

所以现在我的黑胶模型

has_many :collections
has_many :users, through: :collections

我的用户模型有

has_many :collections
has_many :vinyls, through: :collections

但是,在sqlite浏览器中查看时,似乎每个“集合”最终都只有一个user_id和一个vinyl_id。 显然,我需要每个“集合”都有一长串的user_id。

有没有更简单的方法可以做到这一点? 是否可以将collection.rb设置为以下内容?

has_many :users
belongs_to :vinyl

A可能有B的has_many,而B却有B的has_many多个,还是那么疯狂? 这是一个愚蠢的问题吗?

当然,我将不得不在控制器和视图中进行很多修改,但是我只想确保首先以正确的方式设置数据库。 谢谢大家的帮助!

在问题的前半部分,您将准确描述所需的解决方案。 您已正确完成所有操作。

假设您有两个用户A和B,以及三个记录X,Y和Z。用户A有记录Y,用户B有记录Z ...但两个都有记录X。

您创建用户:

a = User.create # id: 1
b = User.create # id: 2

和您的记录:

x = Record.create # id: 1
y = Record.create # id: 2
z = Record.create # id: 3

然后,您建立关联:

a.records << y
a.records << x
b.records << x
b.records << z

这样做的产品在你的4行collections表:

id | user_id | record_id
------------------------
1  | 1       | 2           # user A, record Y
2  | 1       | 1           # user A, record X
3  | 2       | 1           # user B, record X
4  | 2       | 3           # user B, record Z

这就是联接表的工作方式。 它将每个用户连接到其所有记录,并将每个记录连接到其所有用户。

这允许您执行诸如User.first.recordsRecord.first.users

您处在正确的轨道上……继续前进,它将开始单击。 也许将您的RecordOwnerships表和模型从collections重命名为RecordOwnerships或更有意义?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM