【发布时间】:2014-02-27 10:33:37
【问题描述】:
我目前在我的项目中与 has_many :through 关联而苦苦挣扎。协会的基本情况如下:
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
可能再简单不过了..
所以这个想法是用户可以创建许多课程,也可以创建许多主题。主题通过 Content 类与课程相关联。这样做意味着用户可以创建许多主题并将它们与许多课程相关联。太好了,当课程主题重叠时,可以节省用户再次输入大量内容。这一切都很好,花花公子。
但是,我希望用户首先创建一个课程,然后从那里为该课程创建许多新主题。对我来说似乎合乎逻辑。
我的问题是我正在努力寻找最好的方法来做到这一点?
我可以取消 :through 关联并拥有一个基本主题 belongs_to 课程关联,因为这会做我想要的,但会牺牲我想要的额外功能。
我正在考虑带有 fields_for 内容的 form_for 主题?我不禁认为这是一个常见问题,但在互联网上找不到答案。也许是我的措辞。希望这对某人完全有意义......?
提前致谢
【问题讨论】:
-
好的,为了澄清,您的意思是您希望能够同时创建一个
Course和一个或多个关联的Topic对象? -
是的,听起来有点像。很抱歉模棱两可,但这真的让我很困惑。所以基本上,在创建课程后,在其显示页面中会有一个类似“添加主题”的链接,该链接将通过创建一个新的
Topic并在contents中创建记录以建立关联。与课程相关的主题将显示在课程show页面上的列表中。很像基本的belongs_to关联,但带有装饰。希望这是有道理的。 Rails 新手,但学得很快。 -
主要目的是让
Topic与多个Course相关联,但能够像属于Course一样构建。我认为这是有道理的...... -
哦,好吧,那么为特定课程创建一个新的
Topic是在一个单独的页面上(课程的显示页面)。意思是,它不是在创建Course的同一时刻创建的。好吧,事实上,这很容易。答案即将...
标签: ruby-on-rails-4 nested-forms has-many-through form-for fields-for