我有以下型号
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代码中,当我创建一个新的Subtitle时,我正在适当的Track和User中推送它:
Track.find(track_id).subtitles.push(subtitle)
User.find(user_id).subtitles.push(subtitle)
问题是它只能在用户中推送,而不是在Track中推送。但是,如果我删除第二行,它会将其推送到Track。那么为什么不同时为两者工作?
我在Subtitle文档中得到了这个:
"subtitleset_id" : ObjectId( "4e161ba589322812da000002" ),
"subtitleset_type" : "User"
答案 0 :(得分:2)
如果一个字幕属于某个东西,它有一个指向那个东西的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)