用户has_many:课程,但课程不属于:用户

时间:2012-05-10 19:39:27

标签: ruby-on-rails database-design activerecord

我一直在努力寻找可能非常明显的事情:

当我尝试为用户分配课程时,我认为它不允许课程在多个用户的集合中。

我有一个迭代每个用户的方法,并为每个用户分配每个课程的子部分。只有最后几个用户分配了课程。我认为这是因为两者之间的关系存储为课程表中的一个字段,因此一个课程只能属于一个用户。我希望课程属于很多用户。

考虑到这一点,我假设这是因为我需要另一种关系而不是has_many?和HABTM一样?

我觉得我对AR协会如何运作感到困惑......

user.rb

class User < ActiveRecord::Base
  has_many :courses
  has_many :bookmarks, :class_name => 'Course'

  attr_accessible :email, :password, :courses, :bookmarks

  validates_presence_of :password, :on => :create
  validates_presence_of :email, :on => :create
  validates :password, :length => { :in => 6..20 }
  validates_format_of :email, :with => /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
  validates_uniqueness_of :email
end

# == Schema Information
#
# Table name: users
#
#  id              :integer         not null, primary key
#  email           :string(255)
#  password_digest :string(255)
#  course_id       :integer
#  bookmark_id     :integer
#  created_at      :datetime        not null
#  updated_at      :datetime        not null
#

course.rb

class Course < ActiveRecord::Base
  attr_accessible :name
end

# == Schema Information
#
# Table name: courses
#
#  id          :integer         not null, primary key
#  name        :string(255)
#  created_at  :datetime        not null
#  updated_at  :datetime        not null
#  user_id     :integer
#

1 个答案:

答案 0 :(得分:1)

您应该使用HABTM,也可以从课程中删除user_id列,并从用户中删除course_id

class User < ActiveRecord::Base
  has_many :course_users
  has_many :course, :through => :course_users
end

class Course < ActiveRecord::Base
  has_many :course_users
  has_many :users, :through => :course_users
end

class CourseUser < ActiveRecord::Base
  belongs_to :user
  belongs_to :course
# == Schema Information
#
# Table name: course_users
#
#  id          :integer         not null, primary key
#  created_at  :datetime        not null
#  updated_at  :datetime        not null
#  user_id     :integer
#  course_id     :integer
#
end