有没有办法在has_many_through中实现“join table”,而不是创建一个单独的模型

时间:2017-09-18 06:38:13

标签: ruby-on-rails ruby ruby-on-rails-5

我想创建一个has_many_through关系,创建两个名为subject和lesssons的模型。我需要创建一个连接表,而不是创建一个单独的模型。期待一个更好的解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:1)

has_and_belongs_to_many association是一个没有连接模型的多对多关联:

class Subject < ApplicationRecord
  has_and_belongs_to_many :lessons
end

class Lesson < ApplicationRecord
  has_and_belongs_to_many :subjects
end

要生成联接表,请运行rails g CreateJoinTableLessonsSubjects lessons subjects

class CreateJoinTableLessonsSubjects < ActiveRecord::Migration[5.0]
  def change
    create_join_table :lessons, :subjects do |t|
      # t.index [:lesson_id, :subject_id]
      # t.index [:subject_id, :lesson_id]
    end
  end
end

请注意,与lessons_subjects的{​​{1}}相比,表格命名与lesson_subjects不同。

虽然has_many through:稍微简单并且通过不实例化连接模型实例来节省内存,但是存在一些很大的缺点:

  • 没有直接查询联接表的好方法。
  • 无法访问连接表中描述A&amp; A之间关系的其他列。乙

如果您只是通过重命名表格并创建连接模型来发现需要这些功能,那么以后可以简单地从has_and_belongs_to_many转到has_and_belongs_to_many