gpt4 book ai didi

ruby - Mongoid 1..N多态引用关系

转载 作者:可可西里 更新时间:2023-11-01 10:35:33 25 4
gpt4 key购买 nike

我有以下型号

class Track
include Mongoid::Document
field :artist, type: String
field :title, type: String
has_many :subtitles, as: :subtitleset
end

class Subtitle
include Mongoid::Document
field :lines, type: Array
belongs_to :subtitleset, polymorphic: true
end

class User
include Mongoid::Document
field :name, type: String
has_many :subtitles, as: :subtitleset
end

在我的 ruby​​ 代码中,当我创建一个新的字幕时,我将它推送到适当的轨道和用户中,如下所示:

Track.find(track_id).subtitles.push(subtitle)
User.find(user_id).subtitles.push(subtitle)

问题是它只在用户中被推送,而不是在轨道中。但是如果我删除第二行,它就会被推到轨道上。那么,为什么不对两者都起作用呢?

我在字幕文档中得到了这个:

"subtitleset_id" : ObjectId( "4e161ba589322812da000002" ),
"subtitleset_type" : "User"

最佳答案

如果一个字幕属于某物,它就有一个指向那个东西的 ID。一个字幕不能同时属于两个东西。如果属于是多态的,则字幕可以属于未指定类的事物 - 但它仍然不能同时属于两个事物。

你想要:

class Track
include Mongoid::Document
field :artist, type: String
field :title, type: String
has_many :subtitles
end

class Subtitle
include Mongoid::Document
field :lines, type: Array
belongs_to :track
belongs_to :user
end

class User
include Mongoid::Document
field :name, type: String
has_many :subtitles
end

然后你将能够:

Track.find(track_id).subtitles.push(subtitle)
User.find(user_id).subtitles.push(subtitle)

关于ruby - Mongoid 1..N多态引用关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617312/

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