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