簡體   English   中英

在軌道上使用紅寶石創建聯合表的推薦方法:軌道生成支架,軌道生成模型或軌道生成遷移?

[英]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. rails生成支架Course_subject course_id:integer subject_id:integer
  2. Rails生成模型course_subject
  3. Rails生成遷移過程_主題理解

我的理解是,使用選項1將生成控制器,模型和視圖; 選項2不會生成控制器,因此如果我想在網站上查看結果,則需要手動創建視圖文件; 選項3僅生成遷移文件,僅此而已。 我能正確得到這個嗎? 選項1更方便還是不必要?

是的,您做得正確。 只要符合其目的,它們都是正確的。 歸結為您要完成的工作。

選項1將為您提供所需的一切,但這將為您提供不必要的views 在Rails中,您仍然可以控制文件/代碼。 只需單擊一下即可刪除文件。 腳手架只是一種工具,可以幫助我們輕松開發應用程序。

如果這是僅具有外鍵的基本關聯,則可以使用選項2。通過遷移生成模型。 您可以稍后在需要時生成控制器。

選項3將生成遷移,但不包括CourseSubject模型。 您必須自己創建它。 CourseSubject模型應定義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

(由於沒有必要在此處創建字段idcreated_atupdated_at

否則,如果由於某種原因您將要使用模型類或has_many ... through關聯訪問聯接表,則還需要創建一個模型。 因此,請使用命令2。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM