与一个多态的模型的双重关系

时间:2017-08-20 01:42:20

标签: ruby-on-rails activerecord

我有一个场景,我有两个模型" 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>

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