Ruby on rails Rails associations已通过多个,而不是HABTM

Ruby on rails Rails associations已通过多个,而不是HABTM,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我对rails和ActiveRecord相当陌生,我正在尝试找到正确的方法来建模我的数据 我正在构建一个应用程序,让我们的游泳指导员一起制定一个课程计划,显示他们将在课堂上教授什么技能,以及他们将使用什么活动来教授每项技能。一个计划可以包含许多技能,每个技能可以有许多与其相关的活动 在计划表单上有一个用于技能活动组合的小部件。在其中,用户应该能够从下拉列表中选择一项技能,并从列表中为所选技能选择多个活动。此小部件可以在表单上重复任意次数 我当前的型号: Class Plan has_many

我对rails和ActiveRecord相当陌生,我正在尝试找到正确的方法来建模我的数据

我正在构建一个应用程序,让我们的游泳指导员一起制定一个课程计划,显示他们将在课堂上教授什么技能,以及他们将使用什么活动来教授每项技能。一个计划可以包含许多技能,每个技能可以有许多与其相关的活动

在计划表单上有一个用于技能活动组合的小部件。在其中,用户应该能够从下拉列表中选择一项技能,并从列表中为所选技能选择多个活动。此小部件可以在表单上重复任意次数

我当前的型号:

Class Plan
  has_many :plan_activities
end

Class PlanActivities
  belongs_to :plan
  belongs_to :skill
  has_and_belongs_to_many :activities
end

Class Skill
end

Class Activity
end
这个型号正确吗?我的问题是,accepts_nested_attribtues_for不适用于HABTM关联。我已经读到,我可以用has_many to:,替换它,但这意味着要在图片中添加另一个连接模型。只是看起来有点太难看了。有更好的方法吗

编辑:


我的技能和活动是列表形式的,我应该能够在多个计划中包含相同的技能和/或活动。

您的模型非常接近。这里的一个改进是完全删除PlanActivities模型。只需在计划中直接列出关联即可。在这一点上,我认为额外的模式是不合理的。我们这里有一个非常基本的金字塔结构。顶部是包含许多技能的计划,每个技能都有许多活动,因此更简单的模型如下所示:

class Plan
  has_many :plan_skills
  has_many :activities, through: :plan_skills
end

class Skill
  has_many :activities, through: plan_skills
  has_many :plan_skills

end

class PlanSkill
  belongs_to :plan
  belongs_to :skill
  has_many :activities
end


class Activity
  belongs_to :plan_skill
end

联接模型是一个选项,但在这里并非完全必要。Plan.activities将为您创建所需的联接表。

如果我正确理解您的需求,我相信关系应该是这样的。计划通过技能有很多活动,技能有很多活动。请查看我的编辑。你的建议仍然有效吗?是的,这应该是可能的。这不意味着某项技能只能包含在一个计划中吗?其中,我想要的是能够创建任意数量的具有相同技能的计划(您可以从有限的列表中选择一项技能)。例如,假设我有技能1、2和3。我可以有一个包含技能1和2的计划1,以及一个包含技能1和3的计划2。如果你是对的,你需要一个连接模型。请参阅我的编辑。