[英]Recommended way to create a joint table using ruby on rails: rails generate scaffold, rails generate model, or rails generate migration?
我想創建第三個表以指示表A和表B之間的多對多關系。說表A對應於課程模型,表B對應於主題表。 建議您使用以下哪種方式來生成第三個聯合表:
我的理解是,使用選項1將生成控制器,模型和視圖; 選項2不會生成控制器,因此如果我想在網站上查看結果,則需要手動創建視圖文件; 選項3僅生成遷移文件,僅此而已。 我能正確得到這個嗎? 選項1更方便還是不必要?
是的,您做得正確。 只要符合其目的,它們都是正確的。 歸結為您要完成的工作。
選項1將為您提供所需的一切,但這將為您提供不必要的views
。 在Rails中,您仍然可以控制文件/代碼。 只需單擊一下即可刪除文件。 腳手架只是一種工具,可以幫助我們輕松開發應用程序。
如果這是僅具有外鍵的基本關聯,則可以使用選項2。通過遷移生成模型。 您可以稍后在需要時生成控制器。
選項3將生成遷移,但不包括CourseSubject
模型。 您必須自己創建它。 Course
和Subject
模型應定義has_many
關聯,而CourseSubject
模型應具有belongs_to
關聯。 這將使course.subjects
鏈接工作。
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
選擇哪個選項取決於您將要使用的關聯。 對於簡單的has_and_belongs_to_many
關聯,您不需要連接表模型。 只需創建一個遷移即可-命令3是您的選擇。 請注意, courses_subjects
表應遵循一些命名規則 ,在這種情況下,將其命名為courses_subjects
。 遷移示例:
create_table courses_subjects, id: false do |t|
t.references :course
t.references :subject
end
(由於沒有必要在此處創建字段id
, created_at
和updated_at
)
否則,如果由於某種原因您將要使用模型類或has_many ... through
關聯訪問聯接表,則還需要創建一個模型。 因此,請使用命令2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.