Ruby on rails 创建使用迁移解析多对多关系的联接表的过程是什么?

Ruby on rails 创建使用迁移解析多对多关系的联接表的过程是什么?,ruby-on-rails,Ruby On Rails,我想了解创建模型和迁移所遵循的过程,这些模型和迁移反过来会在数据库中创建连接表,以解决多对多关系。例如。如果我有一个课程表,一个学生表,我想创建一个名为studies的连接表,id为from course and students,以及额外的数据,比如年级和开始日期。到底是什么样的过程呢? 如果要对上述3个表名中的每一个使用generatemodel命令,这将为它们创建一个单独的迁移。即使我进入模型并添加相关关联,这也不会影响数据库的创建方式?请您给我一些指导,说明我必须采取哪些步骤才能创建所需

我想了解创建模型和迁移所遵循的过程,这些模型和迁移反过来会在数据库中创建连接表,以解决多对多关系。例如。如果我有一个课程表,一个学生表,我想创建一个名为studies的连接表,id为from course and students,以及额外的数据,比如年级和开始日期。到底是什么样的过程呢? 如果要对上述3个表名中的每一个使用generatemodel命令,这将为它们创建一个单独的迁移。即使我进入模型并添加相关关联,这也不会影响数据库的创建方式?请您给我一些指导,说明我必须采取哪些步骤才能创建所需的外键关系,这里有一些示例。

使用。手动设置

步骤1:分别生成模型。连接模型
Study
将包含外键,因此请记住包含列

rails g model Course title:string
rails g model Student name:string
rails g model Study course_id:integer student_id:integer start_date:date grade:string  
步骤2:建立关联:

# models/course.rb
class Course
  has_many :studies
  has_many :students, through: :studies
end

# models/student.rb
class Student
  has_many :studies
  has_many :courses, through: :studies
end

# models/study.rb
class Study
  belongs_to :course
  belongs_to :student
end
步骤3:运行迁移,重新启动服务器(如果需要),就这样。Rails将处理其余部分

访问连接表中的属性可能需要仔细计时,以确保访问正确的对象,因为连接对象不是通过Rails的内置方法返回的,即
@course.students
。查看一些想法


有关更多信息,请阅读。

对于多对多关系,请使用:

class Car < ActiveRecord::Base
  has_and_belongs_to_many :tires 
end

class Tire < ActiveRecord::Base
  has_and_belongs_to_many :cars
end
class-Car
然后创建如下迁移:

class CreateCarsAndTires < ActiveRecord::Migration
  def change
    create_table :cars do |t|
      t.string :name
    end

    create_table :tires do |t|
      t.string :something
    end

    create_table :cars_tires do |t|
      t.belongs_to :car
      t.belongs_to :tire
      t.string :additional_dataA //optional
      t.int :something_else //optional
    end
  end
end
class CreateCarsandTyres
在迁移中,按字母顺序命名联接表是非常重要的(对于轮胎,在汽车中c排在t之前)正如ActiveRecord将要查找的那样,对于一个以这种方式命名的表,has_many_和_belown_属于关系-classA_multilarized_classB像apples_banana和banana_apples这两个类都不起作用,您必须将表名添加到类中,这违反了配置范式的约定


希望能有帮助

多谢各位。这要清楚得多。因此,我是否正确理解,我必须创建模型汽车和轮胎,然后是第三个模型,称为汽车轮胎。除了在模型中添加关联外,我还应该使用“归属于”关联修改迁移?我想添加附加模型的原因是,我可以为联接表添加验证。很抱歉,对于创建附加属性,gg_的解决方案更易于使用。这样,在添加其他属性时,关联更易于使用。通过这种方式,您可以免费进行迁移…(无需手动编码)。我的错。