Rails HABTM中间值

时间:2012-12-12 15:36:26

标签: ruby-on-rails ruby has-and-belongs-to-many

我必须遵循以下关系:

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

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

2 个答案:

答案 0 :(得分: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_value模型中添加CourseSignup

您可以在the guide to ActiveRecord associations中找到更多详情。

答案 1 :(得分: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