ruby-on-rails - Rails 关联 has_many 通过而不是 HABTM

标签 ruby-on-rails ruby activerecord

我对 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/

相关文章:

ruby-on-rails - rails 4 : select multiple attributes from a model instance

mysql - Oracle 数据库上的 Rails 的表名长度超过 30 个字符,Globalize 找不到我的表

ruby-on-rails - 动态扩展 Virtus 实例属性

ruby-on-rails - 通过delayed_job 使用Gibbon gem 时出错?

ruby-on-rails - 如何在 Active Record/Rails 4 迁移中创建具有唯一索引的新表

ruby - String#delete 忽略特殊字符

ruby-on-rails-3 - Rails 范围不等于

ruby-on-rails - 检查具有关联的对象

ruby - 从 Ruby 中的不同绑定(bind)访问局部变量

ruby-on-rails - 数据建模三向表 has_many 关联