多对多关联是否仍适用于此处?

时间:2015-10-18 05:41:29

标签: ruby-on-rails entity-framework database-design many-to-many

如果某个实体未与多个其他实体同时关联,我是否还应该使用多对多关联?

例如,据我所知,Author-Book关系是多对多的,作者可以写很多书,一本书可以由很多作者撰写。这一直存在。

考虑这种情况。批次在特定时间有许多学生。如果学生失败,他应该转到下一个初级批次。换句话说,学生不能同时属于多个批次。在这种情况下,这是一个多对多的关联?

替代解决方案我想: 我正考虑在学生表中放两列。 initial_batchcurrent_batch。我可以通过检查当前批次和初始批次之间的差距来获取学生的批次历史记录,因为规则学生必须下一个直接批次。此外,batch.students与rails中存在has_many关联。所以,我认为这不是什么大问题。

按批次,我的意思是一批学生在同一年入学。

2 个答案:

答案 0 :(得分:1)

我认为您仍然希望使用关联表(多对多关联),因为您可能希望保留学生所选课程的历史记录。

如果您希望它是多对一并且学生一次属于一个班级,则必须在学生表中添加class_id字段。这允许您调用student.class来查找当前的类,但由于该关系不存在,您将无法执行class.students。出于这个原因,我认为它应该是多对多的。

答案 1 :(得分:1)

  

这是一个多对多的关联

是的。

ActiveRecord关联只是一种创建两个连接对象的方式(ActiveRecordORM - 对象关系映射器)。

记住,因为Ruby是object orientated,每个“模型”(类)都被视为一个对象,每次要用数据填充它时都会调用它。每个对象的每个ActiveRecord关联都通过对象中的方法进行访问...

#app/models/student.rb
class Student < ActiveRecord::Base
   has_many :subjects #-> AR appends the "subjects" method to your Student object
end

简单来说,这意味着即使您具有许多不同对象的功能,也不需要使用填充数据的方法。

如果您有以下内容......

#app/models/student.rb
class Student < ActiveRecord::Base
   has_and_belongs_to_many :subjects
end

#app/models/subject.rb # "class" is a reserved word
class Subject < ActiveRecord::Base
   has_and_belongs_to_many :students
end

这仅提供@students.subjects等的功能/容量。

中包含的内容此方法取决于您:

<% if @students.subjects.any? %>
  <% @students.subjects.each do |subject| %>
     ...
  <% end %>
<% end %>