我有一个场景,我有两个模型" group"和"运动"。 一个团体可能有很多动作,每个动作都与一个团体有关。 动作也可能与各个模型中的一个相关,其中哪个组可能是一个。
所以我和Group&之间有一个很好的关系。 Motion& Motion之间的运动和多态关系基。
class Group < ApplicationRecord
has_many :motions
has_many :motions, as: :motionable
end
class Motion < ApplicationRecord
belongs_to :group
belongs_to :motionable, polymorphic: true
end
虽然这看起来有效但是动作中的新记录会产生多态关系,而我需要has_many关系:
2.4.1 :010 > Group.first.motions.new
Group Load (1.5ms) SELECT "groups".* FROM "groups" ORDER BY "groups"."id" ASC LIMIT $1 [["LIMIT", 1]]
=> #<Motion id: nil, group_id: nil, motionable_type: "Group", motionable_id: 1>
答案 0 :(得分:0)
我现在正在使用以下方法:
class Group < ApplicationRecord
has_many :motions
has_many :subjects, class_name: "Motion", as: :motionable
end
class Motion < ApplicationRecord
belongs_to :group
belongs_to :motionable, polymorphic: true
end
我从以下内容中选择了这个: http://guides.rubyonrails.org/association_basics.html#self-joins
我现在可以使用:
创建has_many关系Group.first.motions.new
和多态关系使用:
Group.first.subjects.new