我对 Rails 和 ActiveRecord 还很陌生,我正在尝试找到对数据建模的正确方法。
我正在构建一个应用程序,让我们的游泳教练制定一个类(class)计划,显示他们将教授他们的类(class)的技能以及他们将使用哪些事件来教授每项技能。一个计划可以包含许多技能,每个技能可以有许多与之相关的事件。
在计划表单上有一个用于技能-事件组合的小部件。在其中,用户应该能够从下拉列表中选择一项技能,并为所选技能从列表中选择多个事件。此小部件可以在表单上重复任意次数。
我现在的型号:
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_attributes_for 不适用于HABTM 关联。我读过我可以通过 has_many 替换它:,但这意味着向图片添加另一个连接模型。只是看起来有点太丑了。有一个更好的方法吗?
编辑:
我的技能和事件采用列表形式,我应该能够在多个计划中包含相同的技能和/或事件。
最佳答案
你的模型非常接近。这里的一项改进是完全删除 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 将为您制作所需的连接表。
关于ruby-on-rails - Rails 关联 has_many 通过而不是 HABTM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874229/