Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中使用联接表_Ruby On Rails_Ruby_Join - Fatal编程技术网

Ruby on rails 在RubyonRails中使用联接表

Ruby on rails 在RubyonRails中使用联接表,ruby-on-rails,ruby,join,Ruby On Rails,Ruby,Join,假设我有两个数据库:一个用于学生,一个用于班级。我希望能够为特定的学生“添加”课程,也能够为特定的课程添加学生。我假设我需要在这里使用联接表,但我对如何使用它们有点迷茫。我最终希望能够做到以下几点: @class.students.find(@student_id) 这会告诉我这个学生是否在课堂上。我知道班级和学生之间的关系是“有很多”,反之亦然。迁移文件中的“t.references:students”是否可以实现这一点?我尝试将该行添加到我的migrate文件中,然后尝试使用上面的语句

假设我有两个数据库:一个用于学生,一个用于班级。我希望能够为特定的学生“添加”课程,也能够为特定的课程添加学生。我假设我需要在这里使用联接表,但我对如何使用它们有点迷茫。我最终希望能够做到以下几点:

  @class.students.find(@student_id)

这会告诉我这个学生是否在课堂上。我知道班级和学生之间的关系是“有很多”,反之亦然。迁移文件中的“t.references:students”是否可以实现这一点?我尝试将该行添加到我的migrate文件中,然后尝试使用上面的语句查找某些内容,但它给了我一个错误。我是RoR新手,所以我甚至不确定实现这一目标的最佳方式是什么。感谢您的帮助

是的,这是一种多对多的关系(班级有很多学生,学生有很多班级)。为此,您将使用
has\u many:through
关系。请查看的文档(Ctrl-F表示“关联-连接模型”)


在迁移中,
t.references:students
是指定
所属关系的方式,因为它只添加了一个
student\u id
列(该列只能容纳一个id,即一个学生)。然而,联接模型将有两列:
student\u id
class\u id
。(顺便说一句,在Ruby中调用模型“类”是自找麻烦。我是否可以建议使用“当然”?)

一切都是真实的@Jordan所说的,下面是具体的步骤:

  • 创建:
    rails g model CourseStudent
    为n:m关系创建连接模型,并迁移到相应的表
  • 编辑迁移文件
    CreateCourseStudent
    ,使其包含以下内容:

    class CreateCourseStudent < ActiveRecord::Migration
      def change
        create_table :course_students do |t|
    
          # Your code comes here
          t.integer :student_id
          t.integer :course_id
    
          # Here comes the generated code 
          t.timestamps
        end
      end
    end
    
  • 现在,您可以使用方法
    所属的
    有许多
    生成的方法:

    • @course.students
    • @student.courses

    试着在中找到所有相关的事实和片段,在那里你应该可以找到所有你需要的信息,以便走上正轨。祝你好运

    这是一个老问题,但万一有人像我一样偶然发现了这个问题,你现在可以拥有关系
    has\u和\u belient\u to \u many
    。因此,可以创建一个联接表:

    create_join_table :students, :courses do |t|
      t.integer :student_id
      t.integer :course_id
    end
    
    然后在模型中,你会说一个学生
    拥有并且属于很多:课程

    一门课程有很多学生,而且属于很多学生。没有必要再上第三堂课叫CourseStudent。这里有所有这些信息

    你能发布你的学生、班级和加入模型的代码吗?课程学生所属不应该是一个符号。请投票!太神了帮帮我!较新版本的rails将此用于迁移:
    t.integer:student\u id
    t.integer:course\u id
    如果您使用的是
    has\u and\u belies\u to\u many
    关系,您还应该在迁移
    create\u表中包含参数
    id:false
    ,因为您没有用该表表示模型。如果您希望表示一个模型,建议您使用
    has\u many to:
    关联。您还可以在迁移中使用
    create\u join\u table
    ,这将不需要显式添加
    id:false
    参数。(正如StephanieS所解释的)实际上
    create\u join\u table
    会自动为您创建两个id字段。。。您可以将该块用于其他字段,也可以将该块用于比@AlexChaffee更进一步的索引,当我将这些id规范包括在该块中时,将引发一个错误。(我在轨道6上。)一个人根本不需要一个街区。我想你的意思是“假设我有两张桌子”。你能澄清一下吗?
    create_join_table :students, :courses do |t|
      t.integer :student_id
      t.integer :course_id
    end