Rails4:在何处以及如何设置HABTM关系?

时间:2014-01-21 05:41:33

标签: ruby-on-rails ruby-on-rails-4 has-and-belongs-to-many

我有一个基本的自动生成的Rails4项目,其中包含两个具有相互HABTM关系的表:

class Page < ActiveRecord::Base
    has_and_belongs_to_many :topics
end
class Topic < ActiveRecord::Base
    has_and_belongs_to_many :pages
end

相应的连接表也存在(称为pages_topics)并且似乎正常工作。

我已经发现使用rails console我可以分别使用create<<将这两个表与新条目和现有条目相关联:

Page.find(1).topics.create(tname: "topic name") ## for new topics

Page.find(1).topics << Topic.find(3) ## for existing topics

但是,我不确定如何在我的代码中使用它们。

  • 我是否会在控制器的createupdate方法中将这些添加到我的控制器类中?
  • 如果是这样,我如何与典型的params.require(...).permit(...) param保护模式一起做到这一点?

或者有没有更好的方法来做到这一点,我还没有学到呢?

2 个答案:

答案 0 :(得分:1)

您需要一个连接表来管理关系。查看Rails指南here了解更多信息。完成所有设置之后,您可以修改表单(如果您需要或需要)和控制器的create方法来构建您需要的许多兄弟姐妹/父母/孩子。

def new
  @page = Page.new
  @page.build_topic
  2.times do # or something like this
    @page.topic.build 
  end
end

凭借他们的关系,你可以反转控制器代码,以相反的方式建立关系。

答案 1 :(得分:0)

如果您想要特定页面的主题列表(Id),请将您的代码放在控制器中,然后将您的代码放在pagesController.rb中,如果您想与特定主题(id)相关的页面列表建立关系,那么请输入您的代码在topicsController.rb中。如果您有任何其他要求,请明确说明,以便我能够理解并根据您的需要回答您。