3

我必须遵循以下关系:

class Course < ActiveRecord::Base
  attr_accessible :name
  has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
  attr_accessible :name
  has_and_belongs_to_many :courses
end

然后我有下表:

create_table :courses_users, :force => true, :id => false do |t|
  t.integer :user_id
  t.integer :course_id
  t.integer :middle_value
end

如何访问(编辑/更新)多对多记录中的中间值?

4

2 回答 2

4

HABTM 应该只用于存储关系。如果您有任何要存储在关系中的字段,您应该创建另一个模型,例如。CourseSignup. 然后,您将使用此模型创建has_many :through => :course_signups关系,因此您的模型将如下所示:

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

class CourseSingup < ActiveRecord::Base
  belongs_to :course
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :course_signups
  has_many :courses, :through => :course_signups
end

然后你可以middle_valueCourseSignup模型中添加你的。

您可以在ActiveRecord 关联指南中找到更多详细信息。

于 2012-12-12T15:45:16.387 回答
1

你想要一个has_many :though,而不是一个 HABTM。

HABTM 没有连接模型,但有has_many :through。就像是:

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

class Enrollment < ActiveRecord::Base
  belongs_to :course
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :enrollments
  has_many :courses, :through => :enrollments
end
于 2012-12-12T15:40:12.833 回答