1

私はおそらく非常に明白な何かに苦労してきました:

コースをユーザーに割り当てようとすると、コースを複数のユーザーのコレクションに入れることができないと思います。

すべてのユーザーを反復処理し、すべてのコースのサブセクションをそのユーザーに割り当てるメソッドがあります。コースが割り当てられているのは、最後の数人のユーザーだけです。これは、両者の関係が Courses テーブルにフィールドとして格納されているためだと思いますので、コースは 1 人のユーザーにしか所属できません。コースを多くのユーザーに所属させたい。

考えてみると、これは 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
#
4

1 に答える 1

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
于 2012-05-10T19:46:01.050 に答える