访问多对多关系中的数据

时间:2012-08-16 12:35:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我创建了许多教师和Sclass的协会。 ClassTeacher是连接表名。

class Teacher < ActiveRecord::Base

  has_many :class_teachers
  has_many :Sclasses, :through => :class_teachers

  attr_accessible :teacher_id
  attr_accessible :tname
  attr_accessible :mob
  attr_accessible :email 
end



class Sclass < ActiveRecord::Base

  set_primary_key :year

  has_many :class_teachers
  has_many :teachers, :through => :class_teachers

  attr_accessible :year

end


class ClassTeacher < ActiveRecord::Base

  belongs_to :teacher
  belongs_to :sclass

  attr_accessible :year
  attr_accessible :teacher_id
end

我在视图中有tlist.html.erb,tnew.html.erb - &gt;老师文件夹,同样我在视图中有slist.html.erb,snew.html.erb - &gt; sclasses文件夹。

当我为教师添加记录时,它也应该要求多年并保存记录。同样的一年,它应该要求teacher_ids并保存记录。我怎么能这样做?这些记录将保存在哪里?

1 个答案:

答案 0 :(得分:0)

我不确定这会回答你的问题但是当你建立多对多关系时,你的模型会得到一些'虚拟'属性,称为[association_name] _ids。因此,在您的情况下,Sclass模型将具有teacher_ids属性,而教师模型将具有sclass_ids

因此,例如,如果您想将具有ID 1,2和3的教师分配给第一个sclass,您可以这样做:

sclass = Sclass.first
sclass.teacher_ids = [1, 2, 3]
sclass.save

要在表单中执行此操作,您可能需要一些名为sclass[teacher_ids][]的复选框(在创建/编辑Sclass时),如下所示:

<% for teacher in Teacher.all -%>
  <%= checkbox_tag "sclass[teacher_ids][]", teacher.id %>
<% end -%>