Rails 3 - has_and_belongs_to_many

故事扮演 提交于 2019-12-02 07:03:06

First, creating the table in a migration doesn't define your model. You have to create a Qualification model in app/models/qualification.rb:

class Qualification < ActiveRecord::Base
  belongs_to :subjects
  belongs_to :teachers
end

Second, if you're using Rails 3, throw out has_and_belongs_to_many and use has_many :through:

class Teacher < ActiveRecord::Base
  has_many :qualifications
  has_many :subjects, :through => :qualifications
end

class Subject < ActiveRecord::Base 
  has_many :qualifications
  has_many :teachers, :through => :qualifications
end

You should only use has_and_belongs_to_many if you don't intend to work directly with the join table. In your case, use it if you don't intend to use Qualification itself but only Teacher and Subject and let Active Record do the dirty work. If you have anything to do with the join model, use has_many :through.

Read more here: Choosing Between has_many :through and has_and_belongs_to_many

In rails 3 the best way is make intermediate table qualification through migration

the attributes will be like of this table

subject_id:integer teacher_id:integer

and also make class of qualification like this

class Qualification < ActiveRecord::Base
  has_many :subjects
  has_many :teachers
end

and then define other two models like

 class Teacher < ActiveRecord::Base
   has_many :qualifications
   has_many :subjects, :through => :qualifications
 end

 class Subject < ActiveRecord::Base 
  has_many :qualifications
  has_many :teachers, :through => :qualifications
 end

and read this link carefully also

   http://blog.hasmanythrough.com/2007/1/15/basic-rails-association-cardinality
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!