Ruby on rails 使用RubyonRails创建联接表的推荐方法:RailsGenerateScaffold、RailsGenerateModel或RailsGenerateMigration?
我想创建第三个表来表示表a和表B之间的多对多关系。比如说,表a对应于课程模型,表B对应于主题表。建议使用以下哪种方法生成第三个联接表: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更方便还是没有必要
我的理解是,使用选项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