Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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创建联接表的推荐方法:RailsGenerateScaffold、RailsGenerateModel或RailsGenerateMigration?_Ruby On Rails_Activerecord_Many To Many - Fatal编程技术网

Ruby on rails 使用RubyonRails创建联接表的推荐方法:RailsGenerateScaffold、RailsGenerateModel或RailsGenerateMigration?

Ruby on rails 使用RubyonRails创建联接表的推荐方法:RailsGenerateScaffold、RailsGenerateModel或RailsGenerateMigration?,ruby-on-rails,activerecord,many-to-many,Ruby On Rails,Activerecord,Many To Many,我想创建第三个表来表示表a和表B之间的多对多关系。比如说,表a对应于课程模型,表B对应于主题表。建议使用以下哪种方法生成第三个联接表: rails生成脚手架课程\主题课程\ id:integer主题\ id:integer rails生成模型课程\u主题 rails生成迁移课程\u主题理解 我的理解是,使用选项1将生成控制器、模型和视图;选项2没有生成控制器,所以如果我想在网站上看到结果,我需要手动创建视图文件;选项3只生成一个迁移文件,而不生成其他文件。我的理解正确吗?选项1更方便还是没有必要

我想创建第三个表来表示表a和表B之间的多对多关系。比如说,表a对应于课程模型,表B对应于主题表。建议使用以下哪种方法生成第三个联接表:

  • rails生成脚手架课程\主题课程\ id:integer主题\ id:integer
  • rails生成模型课程\u主题
  • rails生成迁移课程\u主题理解

  • 我的理解是,使用选项1将生成控制器、模型和视图;选项2没有生成控制器,所以如果我想在网站上看到结果,我需要手动创建视图文件;选项3只生成一个迁移文件,而不生成其他文件。我的理解正确吗?选项1更方便还是没有必要?

    是的,你做得很正确。只要符合目的,它们都是正确的。它归结为你想要完成什么

    选项1将为您提供所需的一切,但这将为您提供不必要的
    视图。在rails中,您仍然可以控制文件/代码。只需单击鼠标即可删除文件。脚手架只是一种工具,可以帮助我们用更少的精力开发应用程序

    如果它是一个基本关联,您只有外键,那么您可以使用选项2。通过迁移生成模型。您可以在以后需要时生成控制器

    选项3将生成迁移,但不包括
    CourseSubject
    模型。你必须自己创造它<代码>课程
    主题
    模型应定义
    具有许多关联,并且
    课程主题
    模型与
    属于
    关联。这将使
    课程。科目
    链接起作用

    class CourseSubject
      belongs_to :course
      belongs_to :subject
    end
    

    是的,你做得对。只要符合目的,它们都是正确的。它归结为你想要完成什么

    选项1将为您提供所需的一切,但这将为您提供不必要的
    视图。在rails中,您仍然可以控制文件/代码。只需单击鼠标即可删除文件。脚手架只是一种工具,可以帮助我们用更少的精力开发应用程序

    如果它是一个基本关联,您只有外键,那么您可以使用选项2。通过迁移生成模型。您可以在以后需要时生成控制器

    选项3将生成迁移,但不包括
    CourseSubject
    模型。你必须自己创造它<代码>课程
    主题
    模型应定义
    具有许多关联,并且
    课程主题
    模型与
    属于
    关联。这将使
    课程。科目
    链接起作用

    class CourseSubject
      belongs_to :course
      belongs_to :subject
    end
    

    命令1从头开始创建资源:迁移、模型、路由、控制器和视图。它还创建测试和一些资产:

    $ rails g scaffold course_subject course_id:integer subject_id:integer
      invoke  active_record
      create    db/migrate/20181022020611_create_course_subjects.rb
      create    app/models/course_subject.rb
      invoke    test_unit
      create      test/models/course_subject_test.rb
      create      test/fixtures/course_subjects.yml
      invoke  resource_route
       route    resources :course_subjects
      invoke  scaffold_controller
      create    app/controllers/course_subjects_controller.rb
      invoke    erb
      create      app/views/course_subjects
      create      app/views/course_subjects/index.html.erb
      create      app/views/course_subjects/edit.html.erb
      create      app/views/course_subjects/show.html.erb
      create      app/views/course_subjects/new.html.erb
      create      app/views/course_subjects/_form.html.erb
      invoke    test_unit
      create      test/controllers/course_subjects_controller_test.rb
      create      test/system/course_subjects_test.rb
      invoke    helper
      create      app/helpers/course_subjects_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/course_subjects/index.json.jbuilder
      create      app/views/course_subjects/show.json.jbuilder
      create      app/views/course_subjects/_course_subject.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/course_subjects.coffee
      invoke    scss
      create      app/assets/stylesheets/course_subjects.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss
    
    命令2为模型创建迁移、模型和测试:

    $ rails g model course_subject
      invoke  active_record
      create    db/migrate/20181022020655_create_course_subjects.rb
      create    app/models/course_subject.rb
      invoke    test_unit
      create      test/models/course_subject_test.rb
      create      test/fixtures/course_subjects.yml
    
    命令3仅创建迁移:

    $ rails g migration course_subject
      invoke  active_record
      create    db/migrate/20181022020717_course_subject.rb
    
    选择哪个选项取决于您将要使用的关联。对于普通的
    具有\u且\u属于\u多个
    关联,您不需要连接表的模型。只需创建一个迁移即可-命令3是您的选择。请注意,联接表应遵循一些规则,在本例中命名为
    courses\u subjects
    。迁移示例:

    create_table courses_subjects, id: false do |t|
      t.references  :course
      t.references  :subject
    end
    
    (未创建字段
    id
    创建的字段和
    更新的字段,因为此处不需要这些字段)


    否则,若出于某种原因,您将使用模型类访问联接表,或者对于
    有许多。。。通过关联,您还需要创建一个模型。因此,请使用命令2。

    命令1从头开始创建资源:迁移、模型、路由、控制器和视图。它还创建测试和一些资产:

    $ rails g scaffold course_subject course_id:integer subject_id:integer
      invoke  active_record
      create    db/migrate/20181022020611_create_course_subjects.rb
      create    app/models/course_subject.rb
      invoke    test_unit
      create      test/models/course_subject_test.rb
      create      test/fixtures/course_subjects.yml
      invoke  resource_route
       route    resources :course_subjects
      invoke  scaffold_controller
      create    app/controllers/course_subjects_controller.rb
      invoke    erb
      create      app/views/course_subjects
      create      app/views/course_subjects/index.html.erb
      create      app/views/course_subjects/edit.html.erb
      create      app/views/course_subjects/show.html.erb
      create      app/views/course_subjects/new.html.erb
      create      app/views/course_subjects/_form.html.erb
      invoke    test_unit
      create      test/controllers/course_subjects_controller_test.rb
      create      test/system/course_subjects_test.rb
      invoke    helper
      create      app/helpers/course_subjects_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/course_subjects/index.json.jbuilder
      create      app/views/course_subjects/show.json.jbuilder
      create      app/views/course_subjects/_course_subject.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/course_subjects.coffee
      invoke    scss
      create      app/assets/stylesheets/course_subjects.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss
    
    命令2为模型创建迁移、模型和测试:

    $ rails g model course_subject
      invoke  active_record
      create    db/migrate/20181022020655_create_course_subjects.rb
      create    app/models/course_subject.rb
      invoke    test_unit
      create      test/models/course_subject_test.rb
      create      test/fixtures/course_subjects.yml
    
    命令3仅创建迁移:

    $ rails g migration course_subject
      invoke  active_record
      create    db/migrate/20181022020717_course_subject.rb
    
    选择哪个选项取决于您将要使用的关联。对于普通的
    具有\u且\u属于\u多个
    关联,您不需要连接表的模型。只需创建一个迁移即可-命令3是您的选择。请注意,联接表应遵循一些规则,在本例中命名为
    courses\u subjects
    。迁移示例:

    create_table courses_subjects, id: false do |t|
      t.references  :course
      t.references  :subject
    end
    
    (未创建字段
    id
    创建的字段和
    更新的字段,因为此处不需要这些字段)


    否则,若出于某种原因,您将使用模型类访问联接表,或者对于
    有许多。。。通过关联,您还需要创建一个模型。因此,请使用命令2。

    谢谢@neume。我是否也需要将“属于”关联添加到“课程主题”的迁移文件中?我做到了这一点,当部署到heroku上时,它不会正确迁移:“class CreateCourseSubjects