我目前正在与has_many:通过我的项目中的关联。协会的基础如下:
class Course < ActiveRecord::Base
has_many :contents
has_many :topics, :through => :contents
end
class Topic < ActiveRecord::Base
has_many :contents
has_many :courses, :through => :contents
end
class Content < ActiveRecord::Base
belongs_to :courses
belongs_to :topics
end
可能不能更基础。
因此,想法是用户可以创建许多课程,也可以创建许多主题。主题与内容类通过课程相关联。这样做意味着用户可以创建许多主题并将其与许多课程相关联。太好了,当课程主题重叠时,可以节省用户再次输入批次。这一切都很好,花花公子。
但是,我希望用户首先创建一个课程,然后从那里为该课程创建许多新主题。对我来说似乎是逻辑的。
我的问题是我正在努力解决这个问题的最佳方法吗?
我可以用:通过关联并拥有一个基本主题属于课程协会,因为这会做我想要的,但以我想要的额外功能为代价。
我正在沿着forns_ for for content的for topem_的台词进行思考吗?我不禁认为这是一个常见答案的常见问题,但无法在Interweb上找到答案。也许是我的措辞。希望这对某人完全有意义。
预先感谢
我会从某种程度上一般的角度写(但是使用您描述的模型),因为它不仅与您所描述的情况有关,而且与您的任何时间有关使用has_many :through
建立在多一关系中的新关联。
在Rails中,这是创建新的Topic
对象的简单示例,该对象与course
相关联:
@course.topics << Topic.new(params[:topic])
以上假设您以前已经加载了Course
对象并将其存储在@course
中。它还假设Topic
数据来自表单,并存储在:topic
密钥下的参数图中。
如果您在执行此部分时检查日志,因为您正确设置了关联,则应看到两个插入语句:INSERT INTO "topics"...
和INSERT INTO "contents"...
。
还有其他方法(有些比其他方法要多得多)可以做到这一点,但我相信这是最直接的。
让我知道这是否有意义。