Has_many:通过协会

时间:2011-12-14 17:17:34

标签: ruby-on-rails-3 orm relational-database has-many has-many-through

我使用has_many :through建立了与三个模型的关系:

class Curriculum class < ActiveRecord::Base

    has_many :interests
    has_many :vacancies,: through => :interests
end

class Vacancy class < ActiveRecord::Base

   has_many :interests
   has_many :resumes,: through => :interests
end

class Interest < ActiveRecord:: Base

    belongs_to :vacancy
    belongs_to :curriculum
end

为了创建课程和空缺,我通过行政创建它们,我需要知道如何创建对空缺id的兴趣,以及如何将它记录在系统上我必须得到它的id并建立新的银行利益关系。我想知道如何编程才能这样做,我想知道控制器将如何获得创建操作,以及更好的方法。

2 个答案:

答案 0 :(得分:0)

我认为这就是你要找的东西:

HABTM Checkboxes

这是使用拥有和属于许多关联的最佳方式。

答案 1 :(得分:0)

首先,尝试阅读整个"Guide to Rails on Associations",尤其是关于has_many :through的部分。然后检查您的模式是否已迁移数据库,并为表interests包含curriculumsvacancies所需的外键[{1}}和curriculum_id

如果全部到位,以下代码将创建两个对象之间的关系:

vacancy_id

最后两行创建了@curr = Curriculum.find(1) @vac = Vacancy.find(1) @curr.interests << @vac @curr.save @curr之间的兴趣,并将其存储在数据库中。因此,您不应该使用ID并直接处理它们,而是使用对象。

现在的第二部分是提供一个用户界面,以便在课程和职位空缺之间定义(和删除)利益。这里的基本流程是:

  • 您有一个重点课程。
  • 您有一个添加/删除课程的链接。
  • 打开的视图显示了可能的空缺列表,其中每个空缺都有一个复选框。
  • 通过选中(或取消选中)复选框,空缺的ID将保存在发送给控制器的请求的参数中。

请参阅(较早的)播客Railscast #52如何在类似的上下文中执行此操作。或者查看has_many :through with checkboxes的示例。

另一种方法是使用JQuery自动完成,并逐个添加兴趣。请参阅使用JQuery Tokeninput的优秀播客Railscast #258